Похоже, что вы смешиваете кодировки:
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);
Результат:
ابراهيم مهنا محمد المهنا