如何使用C#将阿拉伯字符串转换为UTF-8并转为十六进制?
问题解决:阿拉伯文本转UTF-8十六进制输出异常
问题描述
需要将阿拉伯文本转换为UTF-8格式后转为十六进制,但当前代码输出不符合预期。(注:原附图显示实际输出与预期结果存在差异,比如生成的十六进制串和UTF-8编码对应值不匹配)
问题代码
string myName = _name.Text; string myNameLength = _name.TextLength.ToString("X2"); byte[] nameByte = Encoding.Default.GetBytes(myName); var hexStringName = BitConverter.ToString(nameByte); hexStringCo = hexStringCo.Replace("-", "");
问题原因及修复方案
- 核心问题:使用
Encoding.Default会调用系统默认编码(如中文系统为GBK),而非UTF-8,导致阿拉伯文本的编码字节序列错误,最终十六进制结果不符合预期。 - 修复要点:
- 替换编码方式为
Encoding.UTF8,确保阿拉伯文本按UTF-8规则编码。 - 修正变量名错误(代码中
hexStringCo未定义,应改为hexStringName)。 - 若需要的是UTF-8编码后的字节长度,不能直接用
TextLength(字符数),需通过Encoding.UTF8.GetByteCount计算实际字节数。
- 替换编码方式为
修复后代码
string myName = _name.Text; // 计算UTF-8编码后的字节长度并转为十六进制 string myNameLength = Encoding.UTF8.GetByteCount(myName).ToString("X2"); byte[] nameByte = Encoding.UTF8.GetBytes(myName); var hexStringName = BitConverter.ToString(nameByte).Replace("-", ""); // hexStringName即为UTF-8编码对应的十六进制字符串
补充说明
阿拉伯字符的UTF-8编码多为2-3字节,只有用Encoding.UTF8才能得到正确的字节序列,进而生成符合要求的十六进制字符串。
内容的提问来源于stack exchange,提问作者Simple_Code
相关产品推荐
相关产品推荐

