c# - 为什么值为 128 的字符是空字符串而不是欧元符号 €

标签 c# char ascii

按照此处的 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/

相关文章:

c# - 如何在事件处理程序内调用 WebBrowser 上的方法?

c# - 如何确定 GIF 中的像素是否透明 (.NET)

字符数组未使用 %s 打印

c++ - 评估 if 语句中的单个字符 : C++

python - 在 Python 中编写 ElementTree 时如何保留 ASCII 十六进制代码点?

python - 运行代码时,为什么在'±'前面打印'Â'?

c# - 不能再调试我的程序

c# - 调用堆栈仅包含外部代码

c - 试图学习 C,但我遇到了奇怪的错误(至少对我而言)

php - 如何从网址获取波斯语/阿拉伯语字符然后显示