You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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,导致阿拉伯文本的编码字节序列错误,最终十六进制结果不符合预期。
  • 修复要点:
    1. 替换编码方式为Encoding.UTF8,确保阿拉伯文本按UTF-8规则编码。
    2. 修正变量名错误(代码中hexStringCo未定义,应改为hexStringName)。
    3. 若需要的是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:50:40