'chr(32)'和'chr(0)'有什么区别?(这是一个关于IT技术的提问标题)

3
为什么我们需要像空格这样的两个字符? 为什么空格是 chr(32) 而不是 chr(0) ? 另外,chr(160) 是半角空格吗?

请注意,如果您考虑ASCII之外的空格字符(您应该这样做),则有许多不同的空格字符。它们都有不同的用途。 - poke
4个回答

8

chr(0)并不是空格,而是NULL字符。chr(n)返回数字n对应的ASCII字符

当你执行print(chr(0))时,它只是打印出NULL字符的表示形式,也就是什么都没有。

请看下面的例子:

>>> print('hi'+chr(0)+'hello')
hihello
>>> print('hi'+chr(32)+'hello')
hi hello

请注意,NULL既不是None,也不是空字符串:
>>> chr(0) is None
False
>>> chr(0) == ''
False

这实际上什么都不是。


1
实际上,这不是Python输出的结果。print('hi'+chr(0)+'hello') 实际上会打印出带有空格的 hi hello(在Python 2.7和3.6.1中测试过)。虽然chr(0)绝对是空字符,但由于某种原因,Python似乎将其打印为空格。 - Zinki
@Zinki 不,Python会打印空字符。它的呈现方式取决于您的控制台、环境和字体。 - poke
@MehdiHoseini 你在使用哪个Python交互式shell,而且版本是多少? - TerryA
@TerryA 不是楼主,但我在Windows命令行(2.7和3.6),IDLE for 2.7以及使用两者的Eclipse中进行了测试,它们都将chr(0)打印为空格,我觉得这很奇怪。 - Zinki
@Zinki 很奇怪,Windows会这样做......我是Mac OS X用户,终端不打印任何内容。猜测poke响应也适用于OP。 - TerryA
@TerryA IDLE Python 3.5 - Mehdi Hoseini

5

chr(0)NULL字符,非常重要,而chr(32)是空格' 'NULL字符的作用是终止字符串。因此,像x = "abcd"这样的代码实际上是x = "abcd\00",其中\00当然与chr(0)相同。如果没有null字符,您将无法确定字符串的结尾,因为可能会发生以下情况:您逐字节读取字符串,但在"abcd"之后,存储在内存中的其他内容y = "efgh"。如果x末尾没有null字符,则调用print(x)将打印'abcdefgh',甚至可能还有更多不属于x的垃圾,因为计算机不知道何时停止。


2
如果没有误解,chr(int)将把int(十进制值)转换为ascii码中对应的字符...
char(0)是空值 char(32)是空格

1

实际上 chr(n) 返回的不是 ASCII 码,而是 n 的 Unicode 代码点。第一个元素的 Unicode 恰好与 ASCII 相同。

你可以自己试试:chr(15265) 在 Python 3.6 中返回 '㮡'。


4
在Python 2中,chr()只能处理ASCII字符。 - poke

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