[英]Printing escaped Unicode in Python
>>> s = 'auszuschließen'
>>> print(s.encode('ascii', errors='xmlcharrefreplace'))
b'auszuschließen'
>>> print(str(s.encode('ascii', errors='xmlcharrefreplace'), 'ascii'))
auszuschließen
有沒有更漂亮的方法來打印沒有b''
任何字符串?
編輯:
我只是想從Python打印轉義字符,而我唯一的抱怨是,當我這樣做時,Python會添加“ b”。
如果我想在像Windows 7這樣的啞終端中查看實際字符,那么我會得到:
Traceback (most recent call last):
File "Mailgen.py", line 378, in <module>
marked_copy = mark_markup(language_column, item_row)
File "Mailgen.py", line 210, in mark_markup
print("TP: %r" % "".join(to_print))
File "c:\python32\lib\encodings\cp437.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2026' in position 29: character maps to <undefined>
要查看ascii表示形式(如Python 2上的repr()
)以進行調試:
print(ascii('auszuschließen…'))
# -> 'auszuschlie\xdfen\u2026'
要打印字節:
sys.stdout.buffer.write('auszuschließen…'.encode('ascii', 'xmlcharrefreplace'))
# -> auszuschließen…
>>> s='auszuschließen…'
>>> s
'auszuschließen…'
>>> print(s)
auszuschließen…
>>> b=s.encode('ascii','xmlcharrefreplace')
>>> b
b'auszuschließen…'
>>> print(b)
b'auszuschließen…'
>>> b.decode()
'auszuschließen…'
>>> print(b.decode())
auszuschließen…
您從Unicode字符串開始。 將其編碼為ascii
會創建一個帶有所需字符的bytes
對象。 Python不會在不將其轉換回字符串的情況下將其打印出來,並且默認的轉換將其放在b
和引號中。 使用decode
顯式地將其轉換回字符串。 默認編碼為utf-8
,並且由於您的bytes
僅包含ascii
這是utf-8
的子集),因此可以保證工作。
並非所有終端都可以處理多種8位字符集,這是事實。 但實際上,無論您做什么,他們都不會處理。
假設您的操作系統正確設置了終端,那么打印Unicode字符串將產生最佳結果,這意味着終端無法打印的字符將被替換為某些字符,例如問號或類似字符。 自己進行翻譯並不會真正改善。
更新:
由於您想知道字符串中包含哪些字符,因此實際上您想知道它們的Unicode代碼,或者在這種情況下為XML等效代碼。 這比打印要檢查的多,然后通常b''部分本身就不是問題。
但是您可以像這樣輕松輕松地擺脫它:
print(repr(s.encode('ascii', errors='xmlcharrefreplace'))[2:-1])
由於您使用的是Python 3,因此可以將print(s)
寫入控制台。
我可以同意,根據控制台的不同,它可能無法正確打印,但是我可以想象,自2006年以來,大多數現代OS都可以處理Unicode字符串,而不會出現太多問題。 我鼓勵您嘗試一下,看看它是否有效。
另外,您可以通過將編碼放在文件中的任何行之前(類似於shebang)來實施編碼:
# -*- coding: utf-8 -*-
這將強制解釋器將其呈現為UTF-8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.