Конвертировать в UCS2 - PullRequest
       55

Конвертировать в UCS2

9 голосов
/ 09 августа 2010

Есть ли какая-либо функция в Vb.net (или C #), которая кодирует строку в UCS2?

Спасибо

Ответы [ 3 ]

13 голосов
/ 06 августа 2014

Используйте следующие функции для кодирования строки Unicode в формате "UCS2":

    //================> Used to encoding GSM message as UCS2
    public static String UnicodeStr2HexStr(String strMessage)
    {
        byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
        String strHex = BitConverter.ToString(ba);
        strHex = strHex.Replace("-", "");
        return strHex;
    }

    public static String HexStr2UnicodeStr(String strHex)
    {
        byte[] ba = HexStr2HexBytes(strHex);
        return HexBytes2UnicodeStr(ba);
    }

    //================> Used to decoding GSM UCS2 message  
    public static String HexBytes2UnicodeStr(byte[] ba)
    {
        var strMessage = Encoding.BigEndianUnicode.GetString(ba, 0, ba.Length);
        return strMessage;
    }

    public static byte[] HexStr2HexBytes(String strHex)
    {
        strHex = strHex.Replace(" ", "");
        int nNumberChars = strHex.Length / 2;
        byte[] aBytes = new byte[nNumberChars];
        using (var sr = new StringReader(strHex))
        {
            for (int i = 0; i < nNumberChars; i++)
                aBytes[i] = Convert.ToByte(new String(new char[2] { (char)sr.Read(), (char)sr.Read() }), 16);
        }
        return aBytes;
    }

например:

String strE = SmsEngine.UnicodeStr2HexStr("سلام به گچپژ پارسي");
// strE = "0633064406270645002006280647002006AF0686067E06980020067E062706310633064A"
String strD = SmsEngine.HexStr2UnicodeStr("0633064406270645002006280647002006AF0686067E06980020067E062706310633064A");
// strD = "سلام به گچپژ پارسي"
6 голосов
/ 09 августа 2010

Нет, .NET поддерживает полный диапазон Unicode для строк и многих кодировок, полученных из System.Text.Encoding .Вы можете тривиально получить UTF-16 , но не UCS-2.Однако, если вы сначала избавитесь от всех суррогатных пар во входной строке, тогда UTF-16 будет UCS-2.Но нет встроенной кодировки, которая сделает это за вас.

1 голос
/ 09 августа 2010

См. Encoding.Unicode.

Учитывая .NET String, вызовите Encoding.GetBytes, чтобы получить массив байтов, представляющий эту строку, закодированную в UCS2.

Редактировать: В контексте System.Text.Encoding, Unicode = UTF-16.Как указывает Йоханнес, это не одно и то же в присутствии суррогатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...