Convert to UCS2

后端 未结 4 1726
执念已碎
执念已碎 2020-11-30 10:38

Is there any function in Vb.net (or C#) that encodes a string in UCS2?

Thanks

4条回答
  •  忘掉有多难
    2020-11-30 11:17

    Use the following functions to encode unicode string in "UCS2" format:

        //================> 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;
        }
    

    for example:

    String strE = SmsEngine.UnicodeStr2HexStr("سلام به گچپژ پارسي");
    // strE = "0633064406270645002006280647002006AF0686067E06980020067E062706310633064A"
    String strD = SmsEngine.HexStr2UnicodeStr("0633064406270645002006280647002006AF0686067E06980020067E062706310633064A");
    // strD = "سلام به گچپژ پارسي"
    

提交回复
热议问题