在这里的asci表之后的ASCII表中,128的值是a
€但是在C#中执行以下代码并不返回欧元符号
char expectedEuro = Convert.ToChar(128);
Run Code Online (Sandbox Code Playgroud)
尝试将€字符转换为字符总是会产生一个OverflowException因为它对于无符号字节而言太大
Convert.ToByte(`€`);
Run Code Online (Sandbox Code Playgroud)
这会导致问题,因为€当值为128但C#输出空字符时,来自另一个系统的编码 输出字符.
有没有解释这个以及我可以做些什么来解决这个问题?
Chr*_*Fin 11
C#/ .NET使用Unicode字符,因此€符号为8364.
您可以通过以下方式检查:
int val = (int)'€'; // val will be 8364
Run Code Online (Sandbox Code Playgroud)
这也意味着您不能将其表示char为一个,byte因为大多数都需要2个字节.
如果要使用扩展ASCII表,可以使用Encoding.Default:
var valStr = Encoding.Default.GetString(new byte[] { 128 }); // valStr = €
var valByte = Encoding.Default.GetBytes("€"); // valByte[0] = 128
Run Code Online (Sandbox Code Playgroud)
Encoding.Default使用当前的ANSI代码页(见乔的回答了Jeppe或的评论来选择特定的一个),并Encoding.ASCII使用7位ASCII表,所以没有128在ASCII.
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |