中文编解码问题

来源:3-9 请完成Flutter和Android开发环境的搭建

那个逗号

2023-05-06

/*************************************************
Function:       Encode8Bit
Description:    进行8Bit编码来压缩数据
Input:          tsSrc: 需要压缩的数据
Output:         pucDest: 压缩后的数据
Return:         压缩后的字节数
Others:         字符数值在0x00和0xFF之间字符串
压缩代码110
*************************************************/
int CISO15962::Encode8Bit(ubyte* pucDest, tstring tsSrc)
{
	if (pucDest == NULL || tsSrc.empty())
		return -1;
	mstring strSrc = t2a(tsSrc);
	int iLen = strSrc.length();
	strcpy_s((char*)pucDest, iLen+1, strSrc.c_str());
	return iLen;
}

如上,是一段C++的编码代码,我现在的需求是将一段字符串(包含中文)进行输入,用此方法进行编码,然后输出16进制的编码字符串,

  • 例如 输入
    ubyte uc8Back[128] = { 0 }; Encode8Bit(uc8Back, _T("五十多个"));
    编码后的16进制字符串为 CEE5CAAEB6E0B8F6 ,
  • 需求,我需要将此方法转为dart 的语言,我尝试用convert.Utf8Encoder().convert(),但是由于此方法不能编解码中文,所以失败。
  • 请问:dart 版本的方法该怎么写?
写回答

2回答

CrazyCodeBoy

2023-05-09

试试这个,如果还是不行就没好的办法了
final str = '五十多个';
  final bytes = utf8.encode(str);
  final hexStr = hex.encode(bytes);
  print(hexStr);
0
1
那个逗号
非常感谢!可以了 谢谢老师
2023-05-09
共1条回复

CrazyCodeBoy

2023-05-08

在Dart中,可以使用convert包中的Latin1Encoder和HexEncoder实现类似的功能。示例代码如下:

```dart
import 'dart:convert';

void main() {
  final str = '五十多个';
  final bytes = latin1.encode(str);
  final hexStr = hex.encode(bytes);
  print(hexStr); // 输出 CEE5CAAEB6E0B8F6
}
```

其中,`latin1.encode()`将字符串编码为Latin1字符集的字节数组(相当于C++中的8位编码);`hex.encode()`将字节数组编码为16进制字符串。

需要注意的是,这里使用的是Latin1编码而非UTF-8编码,因为C++中的`Encode8Bit`方法是将字符串转换为8位编码的。如果需要使用UTF-8编码,可以使用`utf8.encode()`方法代替`latin1.encode()`。
0
1
那个逗号
老师,感谢您的回复! 测试utf8编解码可以支持中文,但由于要跟C++那边的编解码保持一致,而utf8编码出来的结果是不一致的,遂放弃, 然后我尝试了您的答案,发现在 final bytes = latin1.encode(str); 会报错``` Invalid argument (string): Contains invalid characters.: "五十多个",``` - 我目前的flutter版本是 ```Flutter 3.10.0-14.0.pre.2 • channel master • ,```
2023-05-08
共1条回复

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程