按照此处的 ASCII 表 asci table 128 的值是一个
€
然而,在 C# 中执行以下代码不会返回欧元符号
char expectedEuro = Convert.ToChar(128);
尝试将 €
字符转换为 Char 总是会导致 OverflowException
,因为它对于无符号字节来说太大了
Convert.ToByte(`€`);
这会导致问题,因为当值为 128 时,我们从另一个系统的编码输出 €
字符,但 C# 输出空字符。
是否有对此的解释以及我可以做些什么来解决这个问题?
最佳答案
C#/.NET 使用 Unicode 字符,所以 €
符号是 8364
。
您可以通过以下方式检查:
int val = (int)'€'; // val will be 8364
这也意味着您不能将 char
表示为一个 byte
,因为它们中的大多数需要 2 个字节。
如果你想使用扩展的 ASCII 表,你可以使用 Encoding.Default
:
var valStr = Encoding.Default.GetString(new byte[] { 128 }); // valStr = €
var valByte = Encoding.Default.GetBytes("€"); // valByte[0] = 128
Encoding.Default
使用当前的 ANSI 代码页(请参阅 Joe 的回答或 Jeppe 的评论以选择特定代码页)和 Encoding.ASCII
使用7位的ASCII表,所以ASCII
中没有128
。
关于c# - 为什么值为 128 的字符是空字符串而不是欧元符号 €,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562956/