Encoding.GetEncoding(437).GetString() 错误?

2023-11-23

我有以下测试程序

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);

这会产生以下结果:

c: 167
b: 21
c1: 21

我所看到的hereGetBytes 工作正常
unicode 中的 167 => CP437 中的 21
但 GetString 不起作用
CP437 中的 21 => unicode 中的 21

这是一个错误还是我的错误?


CP437 对于 0-31 范围内的字符不是“双向”的。正如您链接的维基百科页面中所述:

对于许多用途,0 到 31 范围内的代码和代码 127 将 不产生这些符号。其中一些(或全部)将被解释 作为 ASCII 控制字符。

将 Unicode 字符映射到此范围内受支持的 CP437 字符是可行的,但反之则不然。例如,采用字节 13 和 10 表示的字符:如果将它们放在 CP437 字符串中,您实际上希望保留回车符和换行符,而不是转换为项目符号和音符。此行为是正常的:这不是错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Encoding.GetEncoding(437).GetString() 错误? 的相关文章

随机推荐