【发布时间】:2014-06-27 02:18:03
【问题描述】:
按照此处的 ASCII 表 asci table 128 的值是 a€ 但是在 C# 中执行以下代码不会返回欧元符号
char expectedEuro = Convert.ToChar(128);
尝试将 € 字符转换为 Char 总是会导致 OverflowException,因为它对于无符号字节来说太大了
Convert.ToByte(`€`);
这会导致问题,因为当值为 128 但 C# 输出空字符时,我们从另一个系统编码输出 € 字符。
是否有对此的解释以及我可以做些什么来解决这个问题?
【问题讨论】:
-
Convert.ToChar(128) // returns €Convert.ToByte(Convert.ToChar(128)) // returns 128我不明白你的问题? -
感谢 C# 和 .NET 以及整个 IT 行业已切换到 Unicode。 (事实上,很多年前就这样做了。)我已经足够大,可以记住所有 1970 年代不兼容的字符集和 ASCII 与 EBCDIC 与代码页等永无止境的疯狂问题1980 年代。
-
ASCII 库或系统很少见。当您发现自己在思考“ASCII”时,请停下来确定实际的字符集和编码是什么。对于 .NET 库,文件流几乎总是 Unicode/UTF-16(按机器字节顺序)或 Unicode/UTF-8。因此,您必须确定其他系统使用什么字符集/编码,然后使用
Encoding类进行正确转换。