转换为UCS2

kas*_*sar 10 c# vb.net visual-studio-2008

Vb.net(或C#)中是否有任何函数可以编码UCS2中的字符串?

谢谢

Beh*_*imi 12

使用以下函数以"UCS2"格式对unicode字符串进行编码:

    //================> 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;
    }
Run Code Online (Sandbox Code Playgroud)

例如:

String strE = SmsEngine.UnicodeStr2HexStr("???? ?? ???? ?????");
// strE = "0633064406270645002006280647002006AF0686067E06980020067E062706310633064A"
String strD = SmsEngine.HexStr2UnicodeStr("0633064406270645002006280647002006AF0686067E06980020067E062706310633064A");
// strD = "???? ?? ???? ?????"
Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 7

不,.NET支持字符串的完整Unicode范围和从System.Text.Encoding派生的许多编码.你可以轻而易举地获得UTF-16,但不能获得UCS-2.但是,如果您首先删除输入字符串中的所有代理项对,则UTF-16 UCS-2.但是没有内置的编码可以帮助你.


Tim*_*son 1

Encoding.Unicode

给定 .NET String,调用Encoding.GetBytes以获取表示以 UCS2 编码的字符串的字节数组。

编辑:在 的上下文中System.Text.Encoding,Unicode = UTF-16。正如约翰内斯所指出的,在代孕妈妈面前,这些并不是一回事。