Python字符串中的u前缀是什么?

Osc*_*Ryz 204 python syntax

像:

u'Hello'
Run Code Online (Sandbox Code Playgroud)

我的猜测是它表示"Unicode",它是否正确?

如果是这样,从什么时候开始?

Ste*_*all 120

你说得对,见3.1.3.Unicode字符串.

这是自Python 2.0以来的语法.

  • 应该补充一点,它在Python 3中不再是必需的,但仍然是有效的语法。 (4认同)

And*_*rew 113

u in u'Some String'表示您的字符串是Unicode字符串.

问:我很可怕,非常匆忙,我从谷歌搜索登陆这里.我正在尝试将这些数据写入文件,我收到了一个错误,我需要这个最简单,可能有缺陷的解决方案.

答:您应该真正阅读Joel的绝对最低每个软件开发人员,绝对必须知道关于Unicode和字符集(没有借口!)的字符集论文.

问:没有时间代码

A:很好.尝试str('Some String')'Some String'.encode('ascii', 'ignore').但是你应该真正阅读一些关于转换Unicode字符串的答案和讨论,以及这篇关于字符编码的优秀,优秀的入门读物.

  • 如果字符串仅包含*ASCII文本*,则此方法有效.在所有其他情况下,您将必须显式编码. (6认同)
  • 这把你称为"摆脱"的东西.这告诉我你实际上并不了解它是什么.您通常不只是想"摆脱"它,并且从Unicode字符串生成字节字符串的正确方法取决于该字符串包含的内容以及在哪个上下文中. (2认同)
  • @LennartRegebro完全同意-这是一个简单易用的答案,本来可以说是面面俱到,但是却积累了令人恐怖的数目。编辑试图引导人们朝正确的方向发展。 (2认同)
  • 读起来很有趣!谢谢!文章已有 17 年历史,但仍然准确。哇。 (2认同)

ken*_*ytm 50

我的猜测是它表示"Unicode",它是否正确?

是.

如果是这样,从什么时候开始?

Python 2.x.

在Python 3.x中,字符串默认使用Unicode,不需要u前缀.注意:在Python 3.0-3.2中,u是语法错误.在Python 3.3+中再次合法,以便更容易编写2/3兼容的应用程序.

  • @TimPietzcker:仅限于3.0-3.2; 在3.3+中它是合法的(并且没有意义),以便更容易编写2.6 +/3.3 +单代码库和应用程序. (12认同)
  • 在Python 3中使用`u`前缀甚至是语法错误. (4认同)
  • @TimPietzcker:当然,但正如你的评论对于2010年通过搜索找到这个有用答案的人来说是一个有用的补遗,我认为有必要在2014年向任何发现它的人提及3.3中的变化.可能更好的是编辑回答,但我认为这是一个小问题,大多数人都不会遇到(因为除非你在2014年仍然使用3.0-3.2,"不需要前缀"是你需要知道的). (2认同)

Chr*_*ris 5

我来这里是因为我的输出有滑稽字符综合症requests。我以为response.text会给我一个正确解码的字符串,但在输出中我发现有趣的双字符应该是德语变音符号。

结果response.encoding以某种方式是空的,所以response不知道如何正确解码内容,只是将其视为 ASCII(我猜)。

我的解决方案是使用“response.content”获取原始字节并手动应用decode('utf_8')到它。结果是schöne Umlaute。

正确解码

毛皮

与不正确解码

f??r