c#如何将阿拉伯字符编码为utf8?

时间:2015-11-17 10:36:05

标签: c# encoding character-encoding

我尝试将阿拉伯字符编码为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 个答案:

答案 0 :(得分:6)

您不需要将字符串转换为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。