C#如何将阿拉伯字符编码为UTF-8?

3

我尝试将阿拉伯字符编码为utf8,作为示例

string clientName="على";
Encoding iso = Encoding.GetEncoding(1256);
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(clientName);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string clientNameArabic = iso.GetString(isoBytes);

但我认为这不正确,因此我需要帮助。

1个回答

8

您不需要将字符串转换为 Windows-1256 字符集。只需要:

// on server side(before sending as byte array)
var bytes = Encoding.UTF8.GetBytes(clientName);

// on client side(after reciving byte array)
clientName = Encoding.UTF8.GetString(bytes);

除了使用低级IO(例如网络套接字或二进制文件流)的情况外,大多数情况下您无需考虑编码转换,因为UTF-8是.NET高级I/O操作中使用的默认编码。


要将普通的Unicode字符串 على 转换为带有符号的破碎的 mojibake ,比如 Óèïåçäèðÿ ,您应该使用阿拉伯语Windows编码(1256)编写字符串,然后再使用西欧语言的Windows编码(1252)进行读取,就像这样:

var source = "على";

var westernLatin = Encoding.GetEncoding(1252);
var arabic = Encoding.GetEncoding(1256);

var bytes = arabic.GetBytes(source);
var result = westernLatin.GetString(bytes); // Uáì

这里不需要使用UTF-8。

结果是:在编码之前,clientName是相同的。 - Paradigm
@Paradigm,是的,就应该这样。或者你期望有其他的结果? - rufanov
我期望的字符是像Óèïåçäèðÿ这样的。 - Paradigm
@Paradigm,嗯...为了什么目的?只是为了好玩吗?还是想要恶作剧一些客户,让他们看到“屏幕上出现了奇怪的字符!你的数据完全损坏了!付款给我们进行修复!”? - rufanov
@Paradigm,我更新了答案并提供了解决方案。 - rufanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接