关于c#:将utf-8字符串转换为波斯语unicode

convert utf-8 string to Persian unicode

下面的字符串是utf-8。我想把它转换成波斯语Unicode:

1
?§?¨?±?§?2 ?ˉ?§??a: ?§ù…?§ù… ?±???§ ?¨?±???§ù?ù? ?ˉ??úˉ?± ?§?|ù…ù? ?¨?§ ??ù?úˉ ù??±ù…

此站点正确进行转换,结果是:?????????????:???????????????????????????????????????????

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

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

1
2
3
4
5
6
7
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);


我通过阅读什么是问题和解决方案来理解什么是问题。

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

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

但是

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

你的评论和回答。


您可以使用encoding.convert。

1
2
3
4
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(阿拉伯语)。


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

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