[英]How to print ê and other special characters available in ascii in Python for windows
我想在 Python 中為 Windows 打印 ê。 當我在 DOS 提示符下時,我可以輸入 alt+136 來獲得ê 字符。 為什么是這樣?
print(chr(136))
在代碼頁 cp437 下正確打印 ê,但是如何打開帶有這些字符的 unicode 文件:
Sokal’, L’vivs’ka Oblastâ€
BucureÅŸti, Romania
ง'⌣'
並讓它打印這些字符而不是下面的 gobbledygook:
>>> import codecs
>>> f = codecs.open("unicode.txt", "r", "utf-8")
>>> f.read()
u"Sokal\xe2\u20ac\u2122, L\xe2\u20ac\u2122vivs\xe2\u20ac\u2122ka Oblast\xe2\u20ac\nBucure\xc5\u0178ti, Romania\n\xe0\xb8\u2021'\
xe2\u0152\xa3'\nThis text should be in \xe2\u20ac\u0153quotes\xe2\u20ac\\x9d.\nBroken text… it’s ?ubberi?c!"
甚至更糟:
>>> f = codecs.open("unicode.txt", "r", "utf-8")
>>> print(f.read())
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 characters in position 6-7: character maps to <undefined>
下列
import codecs
f = codecs.open("unicode.txt", "r", "utf-8")
s = f.read()
print(s.encode('utf8'))
印刷
Sokal’, L’vivs’ka Oblastâ€
BucureÅŸti, Romania
ง'⌣'
This text should be in “quotesâ€\x9d.
Broken text… it’s ?ubberi?c!
代替
Sokal’, L’vivs’ka Oblastâ€
BucureÅŸti, Romania
ง'⌣'
我正在使用:
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
是否有某種方法可以替換 unicode 字符串中的 ê 等,而是成為 ê aka chr(136)
的可打印 ascii 版本?
請注意,我的問題涉及如何基於原始 UTF-8 unicode 創建新的非 Unicode 擴展 ascii 字符串,如果有等效字符可用,該字符串會將不可打印字符更改為 ascii 代碼頁中的字符,或者用 ? 替換字符或類似的東西,如果有等價物可用。
我看到多個問題,您偶然發現了幾個常見的 Unicode 問題:
如何輸入ê
? -- Alt+136 應該適用於cp437
。 為cp1252
嘗試 Alt+234(未測試) :
>>> u'ê'.encode('cp437') b'\\x88' >>> int('88', 16) 136 >>> u'ê'.encode('cp1252') b'\\xea' >>> int('ea', 16) 234
如何在 Python 中將 Unicode 打印到 Windows 控制台? 如何修復UnicodeEncodeError: 'charmap' ...
異常? --按照鏈接
io.open('unicode.txt', encoding=encoding).read()
為什么 Python 控制台顯示u'\€'
而不是€
? 反過來,如何僅使用 ascii 可打印字符顯示ê
Unicode 字符,例如u'\\xea'
? -- Python REPL 使用sys.displayhook()
(可定制)函數來顯示 Python 表達式的結果。 它調用repr()
例如:
>>> print u'ê' ê >>> print repr(u'ê') u'\\xea' >>> u'ê' u'\\xea'
u'\\xea'
是相應 Unicode 字符串的文本表示。 您可以將其用作 Unicode 字符串文字,以在 Python 源代碼中創建字符串。
在您的情況下可能沒有必要,但通常在 Windows 控制台中輸入/顯示任意 Unicode 字符,您可以安裝win-unicode-console
package 。
無關: print(chr(136))
不正確。 如果環境使用與您的字符編碼不兼容的字符編碼,則會產生錯誤的輸出,例如:
>>> print chr(136)
�
改為打印 Unicode:
>>> print unichr(234)
ê
原因是chr()
在 Python 2 上返回一個字節串。同一個字節可能代表不同字符編碼中的不同字符,這就是為什么在處理文本時應該始終使用 Unicode。
您在閱讀時從 utf8 解碼它,因此您在編寫時需要對其進行編碼(回到 utf8 或其他一些編解碼器)
import codecs
f = codecs.open("unicode.txt", "r", "utf-8")
s = f.read()
print(s.encode('utf8'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.