Преобразование массива байтов Utf8 в UCS2

Я ищу образец кода для преобразования UTF8 (бенгальские символы) для преобразования в массив байтов UCS2. Есть ли прямой способ справиться с этим? Каким-то образом я получил преобразование UCS2, но как строковое значение, а не в массив байтов.

Например:

byte[] message;
message = UTF2UCS.GetBytes
          ( smsText.Substring(0, 
           smsText.Length > maxLength ? maxLength : smsText.Length)); 

Мой обратный вывод должен быть таким.

спасибо


person Raj Jayaswal    schedule 08.06.2015    source источник


Ответы (3)


Что-то вроде этого - лучшее, что вы можете получить. Согласно эта ссылка:

//1200  Unicode UCS-2 Little-Endian (BMP of ISO 10646)
//1201  Unicode UCS-2 Big-Endian

Encoding bytesUCS = Encoding.GetEncoding(1201);
Encoding utf8 = Encoding.UTF8;
byte[] utf8Bytes = utf8.GetBytes(UTF2UCS);
byte[] isoBytes = Encoding.Convert(utf8, bytesUCS, utf8Bytes);
person Gnqz    schedule 08.06.2015
comment
Привет, я использовал аналогичный код здесь. Байты кодированияUCS = Encoding.GetEncoding(1200); Кодировка utf8 = Кодировка.UTF8; байт [] utf8Bytes = utf8.GetBytes (smsText); сообщение = Encoding.Convert(utf8, bytesUCS, utf8Bytes); но он не дает правильный массив байтов. Я отправляю текст আমার নাম রাজ হয়, чей массив байтов в UCS2 должен иметь эту строку 098609ae09be09b0002009a809be09ae002009b009be099c002009b909af09bc, но используя приведенный выше код, я получаю что-то еще - person Raj Jayaswal; 08.06.2015
comment
Я использовал это для кириллицы в своем проекте, и это сработало просто отлично. Мне жаль слышать, что это бесполезно для вас :( - person Gnqz; 08.06.2015

 byte[] utcs2Bytes = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Unicode, newArray);

newArray — это массив байтов, предназначенный для хранения закодированного байта.

person King Chun O    schedule 25.06.2015

Используйте Encoding.GetBytes. и Encoding.GetString :

byte[] bengaliUtf8 = ....
string stringValue = UTF8Encoding.GetString(bengaliUtf8);
byte[] utf16Value = UnicodeEncoding.GetBytes(stringValue);

UTF-16 («Unicode») — лучшее, что вы можете получить, C# не поддерживает UCS-2. Если ваш ввод не содержит суррогатных символов, то вывод UTF-16 соответствует UCS-2.

person Remus Rusanu    schedule 08.06.2015
comment
Можете ли вы немного объяснить суррогатных персонажей. Я использую бенгальские иероглифы - person Raj Jayaswal; 08.06.2015
comment
См., например, Как преобразовать суррогатную пару UTF-16, такую ​​как ‹D800 DC00›, в UTF-8?. UTF-8 может содержать суррогатные 4-байтовые последовательности, которые будут транслироваться в суррогатные пары UTF-16, что делает UCS-2 недействительным. Только вы можете решить, есть ли в исходном тексте суррогаты или нет. Обычный бенгальский блок не содержит суррогатов. - person Remus Rusanu; 08.06.2015
comment
В моем вводе нет суррогатных символов. Пожалуйста, вы можете закончить свою первую строку, которая говорит |byte[] bengaliUtf8 = .... - person Raj Jayaswal; 08.06.2015