(Char)174 返回 (Char)0174 的值,为什么?

4
我正在使用字符串定界符,其中之一是«或174。然而,当我在代码中进行步骤时,在调试器中它看起来像这样:®, 它的编码是0174。请参见此处以获取代码。

以下是我在代码中的处理方式:

string fvDelimiter = ((char)174).ToString();


非常有趣,我会去看一下,如果我也显示同样的东西。 - David Venegoni
2
看看 (char)171 是否能得到正确的字符。这是因为不同的字体对于不同的字符有不同的编码。 - user2140261
成功了!但是我怎么知道这个呢?如果我的IDE字体改变了,那么这些又会不同吗?我想问的是,如何确保它«始终如一,无论在哪个系统上编译/运行? - Refracted Paladin
3
不是字体的问题,而是Visual Studio使用UTF8编码。在UTF8编码中,"«"是00AB(十进制0171)。请查看UTF代码表,而不是ASCII代码表。 - EkoostikMartin
3个回答

6
这与字符编码有关。在Unicode中,174(十六进制中的AE)表示®,默认情况下在string中使用。但在扩展ASCII码中,它是«
请参考您提供的文章中的差异:

插入ASCII字符

要插入ASCII字符,请按住ALT键并输入字符代码。例如,要插入度(º)符号,请按住ALT键并在数字键盘上键入0176。

插入Unicode字符

要插入Unicode字符,请输入字符代码,按下ALT,然后按X。例如,要输入美元符号($),请输入0024,按下ALT,然后按X。


谢谢,我知道ASCII的技巧,但不知道Unicode的。我注意到在VS2008中Unicode的快捷方式无法使用。 - Refracted Paladin

1
根据我所见,它是基于所使用的字体。在Windows上,我使用“字符映射”来检查它们。例如,在Calibri字体中,“«”字符为171。

谢谢,那似乎就是了,但请看我的评论。 - Refracted Paladin

1
由于在C#中,char代表一个与0174完全匹配的unicode字符编码,而不是ASCII编码174,这是一个简单的原因。
以下是一个代码示例,可以更好地理解我的意思。
            var chrs = System.Text.Encoding.ASCII.GetChars( new byte[]{0174});
            var chrsUtf = System.Text.Encoding.UTF8.GetChars(new byte[] { 0174 });
            var chrsUnicode = System.Text.Encoding.Unicode.GetChars(new byte[] { 0174 }); 
            Debug.WriteLine(chrs[0].ToString());
            Debug.WriteLine(chrsUtf[0].ToString());
            Debug.WriteLine(chrsUnicode[0].ToString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接