Юникод на арабский Win1256 - PullRequest
1 голос
/ 07 июня 2019

У меня есть Unicodes в моей базе данных, которые были закодированы с арабского, и мне нужен исходный код, чтобы преобразовать его в настоящий арабский. Я пробовал много кодов, но у меня не работает, и я устал. Может кто-нибудь, пожалуйста, помогите мне решить.

На этом рисунке показан правильный результат с использованием Unicodes:

image

Например

"ÇÈÑÇåíã ãåäÇ ãÍãÏ ÇáãåäÇ" 

должен вернуть

"ابراهيم مهنا محمد المهنا". 

1 Ответ

2 голосов
/ 07 июня 2019

Похоже, что вы смешиваете кодировки:

string original = @"ابراهيم مهنا محمد المهنا";

byte[] bytes = Encoding.GetEncoding(1256).GetBytes(original);

и получаете правильный Win-1256 байтовый массив:

{c7 c8 d1 c7 e5 ed e3 20 e3 e5 e4 c7 20 e3 cd e3 cf 20 c7 e1 e3 e5 e4 c7}

, а затем ошибочно рассматриваете массив как unicode :

{00 c7 00 c8 00 d1 00 c7, ..., 00 c7}   

однако 00 c7 больше не является арабским символом.Это латинский.Для восстановления оригинальной строки вы можете попробовать

string source = "ÇÈÑÇåíã ãåäÇ ãÍãÏ ÇáãåäÇ";

string result = Encoding
  .GetEncoding(1256)              
  .GetString(Encoding               
     .Unicode                      // read as unicode 
     .GetBytes(source)             
     .Where((b, i) => i % 2 == 0)  // odd bytes only
     .ToArray());

Console.WriteLine(result);

Результат:

ابراهيم مهنا محمد المهنا
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...