преобразовать строку utf-8 в персидский юникод

У меня есть следующая строка как utf-8. я хочу преобразовать его в персидский юникод:

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

этот сайт правильно выполняет преобразование и результат: نرم

Я тестирую много методов и способов, но не могу решить эту проблему, например, эти две строки не дали желаемого результата:

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);

person Nigje    schedule 24.05.2017    source источник
comment
@dasblinkenlight, я тестирую string result = Encoding.GetEncoding("all type").GetString(inpud) или Encoding.UTF8.GetBytes(input) и Encoding.UTF8.GetString и многие другие тенденции.   -  person Nigje    schedule 24.05.2017
comment
Это дубликат stackoverflow.com/a/31960245/298573.   -  person VahidN    schedule 24.05.2017
comment
@VahidN, я искал, но не вижу этого вопроса. Я прочитал вашу ссылку и понял, в чем проблема. другим поиском я исправил это.   -  person Nigje    schedule 24.05.2017


Ответы (3)


Я понимаю, в чем проблема, прочитав В чем проблема и Решение .

когда я преобразовал 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);

Танки за ваши комментарии и ответы.

person Nigje    schedule 24.05.2017
comment
На самом деле вы используете Encoding.GetEncoding("Windows-1252") и Encoding.Default, которые могут быть разными в разных настройках и на разных языках. - person VahidN; 24.05.2017

Вы можете использовать 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 (арабский).

person stybl    schedule 24.05.2017

Я получаю байты по UTF8 и получаю строку по умолчанию следующим образом. Это сработало для меня.

byte[] bytes = Encoding.UTF8.GetBytes(inputString);
resultString = Encoding.Default.GetString(bytes);
person Kaveh Safavi    schedule 21.01.2018