½的ASCII码是多少?

10
我想在文件中打印值为'½'的字符。我查找了此字符的ASCII值,因为在Alt+(ASCII值)下也会产生相同的结果。令我惊讶的是,在各个网站上我找到了两个不同的ASCII值来表示这个符号,一个是171,另一个是189。
我尝试使用171和189来写这个符号。再次让我感到惊讶的是,如果我在Windows上写作,171将给我这个符号。但如果我在UNIX上写作,189将给我这个符号。
我知道同一个符号不能有两个ASCII值,但我在不同的操作系统上得到了两个有效代码。所以有人能告诉我符号'½'的真正ASCII码是什么吗?

7
没有针对那个字符的ASCII编码。您是否考虑使用其他字符集? - alex
这不是ASCII编码,而是ISO8859-1 / 'latin-1'编码。不同的编码会以不同的方式处理8位字符,因此它的处理方式取决于您的操作系统和环境设置。 - smci
5个回答

22

½不是ASCII字符集中的字符。

你在网上找到的值可能不同,因为它们使用了不同的字符集。例如,在Unicode发明之前,Windows的本地化版本都使用不同的代码页,其中基本的ASCII集被扩展了一些附加字符。

现在,当然,一切(或应该)都是完全Unicode的。有关该字符(分数一半)的详细Unicode信息可以在这里找到。请注意,同一数值还有多种表示方式(例如,十进制、十六进制、二进制等)。


谢谢回复。那是否意味着,由于这可能是一个多字节字符集,它可能没有固定的ASCII码? - user2238999
3
没错。你不能指望一个“扩展”(即非 ASCII)字符在所有多字节字符集(MBCS)中具有相同的值(甚至存在)。当然,这不是什么大问题,因为如今没有使用 MBCS 的好理由。将您的应用程序编译为 Unicode,在 Windows 上使用 UTF-16 表示。 - Cody Gray

8
在Windows系统中,如果使用ALT快捷键,则可以插入相当于“Code page 850”字符的3位数字。因此,按下 ALT + 1 7 1 将插入½符号。
189是½符号在ANSI / UTF-8 / WIN-1252 / ISO8859-1编码中的值。要在ANSI中使用ALT代码,必须先按 0 ,然后按 ALT + 0 1 8 9插入½符号。

5
请阅读ASCII维基百科页面。您将了解到ASCII没有“一半”的字符。
现在,大多数系统都可以配置为使用UTF-8编码(这是Web和Unix系统上“默认”或至少最常用的编码)。
UTF-8是Unicode可变长度编码。因此,许多字符或字形由几个字节表示。对于½(官方上称为分数一半 Unicode字符),其UTF8编码是两个十六进制字节0Xc2 0xBD,因此在C符号中为\302\275 我正在使用Linux Gnome Character Map实用程序gucharmap查找所有内容。
你可能会对UTF-32感兴趣(一种使用32位字符的固定长度编码,其中½由0x000000BD表示),甚至是UTF-16,其中许多字符是16位(特别是½是0x00BD,例如在UTF-16中的一个16位字符),但并非全部。你也可能会对wide characters感兴趣,即最近CC++标准的wchar_t(在Windows上为UTF-16,在许多Unix上为UTF-32)。
顺便提一下,Qt将QChar用作UTF-16(Java也有UTF-16的char...),但Gtk使用UTF-8,即可变长度字符。
注意,对于像UTF-8这样的可变长度字符编码,获取字符串中第N个字符(而不是第N个字节!)需要扫描字符串。此外,某些字节组合不是有效的UTF-8。

3

正如其他人指出的那样:在ASCII表(值0..127)中找不到它。

但是它有一个Unicode代码:

  • ½ U+00BD 分数一半

也可以使用Unicode U+2044分数斜杠将其放入文本中:

  • 当您的文本包含三个代码点时:12
  • 但它会呈现为1⁄2

这样做的好处是适用于任何分数:

  • 1⁄2
  • 3⁄5
  • 22⁄7
  • 355⁄113
  • 355⁄113 - 1⁄3748629

0

我非常确定它确实是ASCII表的一部分:

在Windows中,确保“NumLock”打开,然后尝试[ALT +(NumPAD)171] = ½。 要使用¼,请使用[ALT + 172]


3
你认为的ASCII并不是真正的ASCII,这种情况很普遍。如果有人说某个东西是ASCII,请要求提供规范或更正。 - Tom Blodget

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