我有代码。 我想将189'S'作为第一个char,但我有1029'S'作为第一个char。 我无法理解原因。
long longNumber = 189;
var longNumberSplittedToBytes = BitConverter.GetBytes(longNumber); // as expected 8 bytes array: first is 189
var firstChar = Encoding.Default.GetChars(longNumberSplittedToBytes)[0]; // First Symbol is S but there is char code 1029 not 189!
谢谢你的帮助!
答案 0 :(得分:1)
看起来默认编码为Windows-1251。
字符189(十六进制0xBD)是西里尔语大写字母Dze(Ѕ
),unicode +0405。
C#在其字符串和字符中使用unicode。十六进制0x0405是十进制的1029。
答案 1 :(得分:1)
您首先将long
转换为一系列字节。第一个具有十六进制值BD。
然后,您将该字节数组视为编码字符串,使用您的默认编码,这显然是代码,如https://msdn.microsoft.com/en-us/library/cc195053.aspx
在该代码页的十六进制值“BD”处,您将获得Ѕ
,即“Cyrillic Capital Letter Dze”。转换为常规.Net字符(使用unicode)的代码为1029。