将 utf-8 字符串转换为波斯语 unicode

convert utf-8 string to Persian unicode

我有以下字符串为 utf-8。我想将其转换为波斯语 unicode:

ابراز داشت: امام رضا برخال� دیگر ائمه با جنگ نرم

this site 正确地进行转换,结果是: ابراò داشت: امام رضا برخالو دوگر ائمه با جنگ نرم

我测试了很多方法,但无法解决这个问题,例如这两行没有产生预期的结果:

string result = Encoding.GetEncoding("all type").GetString(input);

byte[] preambleBytes= Encoding.UTF8.GetPreamble();
byte[] inputBytes= Encoding.UTF8.GetBytes(input);
byte[] resultBytes= preambleBytes.Concat(inputBytes).ToArray();

string result=Encoding.UTF8.GetString(resultBytes.ToArray());
string resultAscii=Encoding.Ascii.GetString(inputBytes);
string resultUnicode=Encoding.Unicode.GetString(inputBytes);

您可以使用 Encoding.Convert.

string source = // Your source
byte[] utfb = Encoding.UTF8.GetBytes(source);
byte[] resb = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-6"), utfb);
string result = Encoding.GetEncoding("ISO-8859-6").GetString(resb);

注意:我不确定您想要哪个标准,所以在示例中我使用了 ISO-8859-6(阿拉伯语)。

我通过阅读 What is problem and Solution 了解问题所在。

当我将 string 转换为 byte[] 时,我强制将其转换为 utf-8 格式,但实际上我应该使用 默认转换格式。

False converting: 
byte[] bytes = Encoding.UTF8.GetBytes(inputString);
resultString = Encoding.UTF8.GetString(bytes);

但是

True converting:
byte[] bytes = Encoding.Default.GetBytes(inputString);
resultString = Encoding.UTF8.GetString(bytes);

感谢您的评论和回答。

我通过 UTF8 获取字节,默认获取字符串,如下所示。这对我有用。

byte[] bytes = Encoding.UTF8.GetBytes(inputString);
resultString = Encoding.Default.GetString(bytes);