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

如何在C# WinForm中正确显示可读阿拉伯字符串?

如何在C#中还原Windows-1256编码的阿拉伯字符串

我来帮你解决这个问题——你遇到的本质是编码的逆向转换问题,咱们一步步理清楚:

问题根源

你在Notepad里的操作逻辑是:把被错误编码解析的乱码字符串("ÌÜÜæØÜÜÇÈá ÊíÌÜÜí 2"),重新用正确的编码(Windows 1256)读取,从而得到正确的阿拉伯语。这里的关键是:这个乱码是原本Windows 1256编码的字节,被你的系统默认ANSI编码(Notepad里的ANSI选项对应系统当前代码页,通常是Windows 1252)错误解析后生成的。

你之前代码无效的原因

你错误地选择了windows-1250(中欧语言编码)作为源编码,但实际生成乱码的是系统默认的ANSI编码(比如Windows 1252),源编码不匹配,自然转换不出正确结果。

正确的C#实现代码

// 1. 获取生成乱码的源编码:即Notepad++里的ANSI,对应系统默认编码
Encoding sourceEncoding = Encoding.Default;
// 如果你能确定系统ANSI是Windows 1252,也可以直接写:Encoding.GetEncoding(1252);

// 2. 获取目标编码:阿拉伯语专用的Windows 1256
Encoding targetEncoding = Encoding.GetEncoding("Windows-1256");

// 3. 把乱码字符串转回源编码对应的字节数组
byte[] sourceBytes = sourceEncoding.GetBytes("ÌÜÜæØÜÜÇÈá ÊíÌÜÜí 2");

// 4. 用目标编码解码字节数组,得到正确的阿拉伯字符串
string correctArabicText = targetEncoding.GetString(sourceBytes);

// 输出结果:جــوطــابل تيجــي 2
Console.WriteLine(correctArabicText);

补充说明

  • 如果你的系统默认ANSI不是Windows 1252,可以先在Notepad++里查看ANSI对应的具体代码页(比如通过「编码→字符编码」的子菜单),然后用Encoding.GetEncoding(代码页编号)来指定源编码(比如Windows 1252对应编号1252,Windows 1256对应编号1256)。
  • 这段代码的逻辑和你在Notepad++里的操作完全一致:先把乱码还原成原始字节,再用正确的编码解析字节。

内容的提问来源于stack exchange,提问作者Mohamed SAIM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:11