2015-11-17 5 views
2

я пытаюсь кодировать арабские символы в utf8 в качестве образцаC# Как кодировать арабские символы в utf8?

string clientName="على"; 
Encoding iso = Encoding.GetEncoding(1256); 
Encoding utf8 = Encoding.UTF8; 
byte[] utfBytes = utf8.GetBytes(clientName); 
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes); 
string clientNameArabic = iso.GetString(isoBytes); 

, но я думаю, что это не правильно так, мне нужна помощь

ответ

4

Вам не нужно преобразовать строку в Windows-1256 кодировкой. Это просто:

// on server side(before sending as byte array) 
var bytes = Encoding.UTF8.GetBytes(clientName); 

// on client side(after reciving byte array) 
clientName = Encoding.UTF8.GetString(bytes); 

Также в большинстве ситуации (за исключением при использовании очень низкого уровня IO, как сетевые сокеты, или потоки двоичных файлов) вам не нужно думать о кодировании преобразование вообще, потому что UTF-8 является кодировкой по умолчанию, используемой в высокопроизводительных операциях ввода/вывода .NET.


Чтобы выполнить свою странную задачу преобразования обычной строки Unicode على осколков mojibake с символами, как Óèïåçäèðÿ вы должны написать строку, используя арабскую для Windows Encoding (1256), а затем прочитать его обратно, используя западноевропейскую для Windows Encoding (1252) например:

var source = "على"; 

var westernLatin = Encoding.GetEncoding(1252); 
var arabic = Encoding.GetEncoding(1256); 

var bytes = arabic.GetBytes(source); 
var result = westernLatin.GetString(bytes); // Uáì 

Не нужно использовать UTF-8 здесь.

+0

результат: clientName же перед кодировкой – Paradigm

+0

@Paradigm, да, как и должно быть. Или вы ожидали чего-то еще? – rufanov

+0

Я ожидал таких персонажей, как Óèïåçäèðÿ – Paradigm

Смежные вопросы