See*_*eeR 8 .net c# character-encoding .net-3.5
我有以下测试程序
char c = '§';
Debug.WriteLine("c: " + (int)c);
byte b = Encoding.GetEncoding(437).GetBytes("§")[0];
Debug.WriteLine("b: " + b);
char c1 = Encoding.GetEncoding(437).GetString(new byte[] { 21 })[0];
Debug.WriteLine("c1: " + (int)c1);
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:
c: 167
b: 21
c1: 21
Run Code Online (Sandbox Code Playgroud)
正如我在这里看到的那样GetBytes
在unicode中工作正常167 =在CP437中> 21
但是在CP437中GetString不工作
21 =在unicode中> 21
这是一个错误还是我的错误?
对于0-31范围内的字符,CP437不是"双向".如您在维基百科页面中所述:
对于许多用途,0到31范围内的代码和代码127将不会产生这些符号.其中一些(或全部)将被解释为ASCII控制字符.
将Unicode字符映射到此范围内支持的CP437字符可以正常工作,但不是相反.例如,取字符13和10表示的字符:如果你在CP437字符串中输入它们,你实际上希望保留回车符和换行符,而不是转换为子弹和音符.这种行为是正常的:它不是一个bug.