【发布时间】:2011-10-22 11:41:20
【问题描述】:
我有以下测试程序
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
我可以看到 here GetBytes 工作正常
Unicode 中的 167 => CP437 中的 21
但 GetString 不工作
CP437 中的 21 => Unicode 中的 21
这是一个错误还是我的错误?
【问题讨论】:
-
一个长镜头,但
GetBytes和GetString都返回一个元素的数组吗? -
这可能是因为 CP437 中不能写入 167,所以它映射到 CP437 中的占位符 21(可能是
?)。占位符映射回 unicode 中的占位符,也就是 21。 -
@Dani:你确定吗?该字符确实存在并且在 CP437 中有效,它应该使用一个字节来表示它。它在 Unicode 中可能超过一个字节,但在 437 中没有。检查链接的 wiki 中的 char 21,即那个字符。
-
@Kieren Johnstone - 是 GetBytes(...).Length = 1 和 GetString(...).Length = 1
-
您能否再次出于兴趣尝试显示/打印从
GetString返回的字符串?我不知道这些方法的内部工作原理,但我同意这看起来很奇怪。
标签: c# .net .net-3.5 character-encoding