使用python 2.7,我有一个端点,该端点返回包含字符'\ u2019','\ u2018'和'\ u2026'的字符串。我无法通过编码,解码等的任何组合来解决这些问题。
实际的字符串如下所示: “ \ u2018Ralph打破了互联网\ u2019和\ u2018Creed II \ u2019成为感恩节热门”
这是一个代码段
#!/usr/bin/python
# -*- coding: utf-8 -*-
...
>>> '\u2019'.encode('ascii')
'\\u2019'
>>> '\u2019'.encode('utf-8')
'\\u2019'
>>> '\u2019'.decode('utf-8')
u'\\u2019'
>>>'\u2019'.decode('ascii')
u'\\u2019'
我正在运行命令行,但也尝试输出到文件无济于事。在这些类型的问题上有许多类似的线索,但是还没有找到一种可行的方法。我想我可以进行某种正则表达式字符查找和替换,但这似乎很笨拙。
答案 0 :(得分:1)
您是否检查过此线程:Removing \u2018 and \u2019 character
这些是Unicode引号字符。
u“ \ u2018Ralph中断了互联网\ u2019和\ u2018Creed II \ u2019 Are 感恩节热门”
返回:
“ Ralph破坏了互联网”和“ Creed II”是感恩节热门歌曲”
希望这会有所帮助。
答案 1 :(得分:0)
我赞成@Ying Cai,但我会给你一些提示:
如果在使用from __future__ import unicode_literals
时添加Python 2.7
,则整个文件将被视为Python 3.X
,这意味着所有字符串文字将被视为unicode。如果您在Python 2.7
上并且使用u"\u2018Ralph Breaks the Internet\u2019 and \u2018Creed II\u2019 Are Thanksgiving Hits"
而不添加from __future__ import unicode_literals
,则该字符串现在为unicode
,它将按预期工作。
@Mark我刚刚更新了答案,因为我确实在考虑from __future__ import unicode_literals
而不是# -*- coding: utf-8 -*-
。感谢您的评论。
答案 2 :(得分:0)
您需要3件事才能在Python 2上打印非ASCII字符。
print
示例(使用代码页437的Windows控制台):
C:\>py -2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> u'\u2018Ralph\u2019' # Didn't use `print`
u'\u2018Ralph\u2019'
>>> print u'\u2018Ralph\u2019' # cp437 doesn't support these characters.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2018' in position 0: character maps to <undefined>
>>> ^Z
将代码页更改为支持字符的页面:
C:\>chcp 1252
Active code page: 1252
C:\>py -2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\u2018Ralph\u2019'
‘Ralph’
请注意,最新的Python 3的工作方式有所不同。代码页无关紧要(但字体无关紧要):
C:\>py -3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '\u2018Ralph\u2019'
'‘Ralph’'
>>> print('\u2018Ralph\u2019')
‘Ralph’
>>> print(ascii('\u2018Ralph\u2019')) # Old behavior to see escape codes.
'\u2018Ralph\u2019'