unicode标准中有足够的代码点,你需要4个字节来存储它们.这就是UTF-32编码所做的.然而,UTF-8编码通过使用称为"可变宽度编码"的东西以某种方式将这些压缩到更小的空间.
实际上,它设法在一个字节中代表US-ASCII的前127个字符,它看起来与真正的ASCII完全相同,因此您可以将许多ascii文本解释为UTF-8而不对其执行任何操作.干净的把戏.那么它是怎样工作的?
我将在这里提出并回答我自己的问题,因为我只是做了一些阅读以弄清楚它并且我认为它可能会节省其他人一些时间.如果我有一些错误,也许有人可以纠正我.
我有一个字符串,表示一个使用逗号分隔数千的数字.如何将其转换为python中的数字?
>>> int("1,000,000")
Run Code Online (Sandbox Code Playgroud)
生成一个ValueError
.
在我尝试转换它之前,我可以用空字符串替换逗号,但不知何故感觉不对.有没有更好的办法?
我注意到很多网站不再需要解决方法,因此关闭cookie的用户仍然可以在网站上获得相同的体验.这个问题在现代网络开发中消失了吗?我们已经达到了没有人这样做的地步,所以我们不需要打扰吗?
我意识到这是一个总的n00b问题,但我很好奇,我想我可能会在这里获得比其他任何地方更好的解释.这是一个列表(我正在使用Dr. Scheme)
> (list 1 2 3)
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
我认为这只是糖:
> (cons 1 (cons 2 (cons 3 null)))
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
另一方面,这做了其他事情:
> (cons 1 (cons 2 3))
(1 2 . 3)
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么会有所不同?要求列表末尾的空值有什么意义?
我试图通过回到基础知识来解决一些令人沮丧的编码问题.在Dive Into Python示例9.14(此处)中,我们有:
>>> s = u'La Pe\xf1a'
>>> print s
Traceback (innermost last): File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('latin-1')
La Peña
Run Code Online (Sandbox Code Playgroud)
但在我的机器上,这种情况发生了:
>>> sys.getdefaultencoding()
'ascii'
>>> s = u'La Pe\xf1a'
>>> print s
La Peña
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这些不同.任何人?