Vb.net(或C#)中是否有编码UCS2中字符串的函数?
由于
答案 0 :(得分: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;
}
例如:
String strE = SmsEngine.UnicodeStr2HexStr("سلام به گچپژ پارسي");
// strE = "0633064406270645002006280647002006AF0686067E06980020067E062706310633064A"
String strD = SmsEngine.HexStr2UnicodeStr("0633064406270645002006280647002006AF0686067E06980020067E062706310633064A");
// strD = "سلام به گچپژ پارسي"
答案 1 :(得分:6)
不,.NET支持字符串的完整Unicode范围以及源自System.Text.Encoding的许多编码。您可以trivially get UTF-16,但不能使用UCS-2。但是,如果您首先删除输入字符串中的所有代理项对,则UTF-16 是 UCS-2。但是没有内置的编码可以帮助你。
答案 2 :(得分:1)
请参阅Encoding.Unicode
。
给定.NET String
,调用Encoding.GetBytes
以获取表示在UCS2中编码的字符串的字节数组。
编辑:在System.Text.Encoding
的上下文中,Unicode = UTF-16。正如约翰内斯指出的那样,这些在代理人面前并不是一回事。
答案 3 :(得分:0)
我认为String.Normalize()可以满足您的需求。
String.Normalize()
https://docs.microsoft.com/en-us/dotnet/api/system.string.normalize?view=netframework-4.8