簡體   English   中英

在Python中打印轉義的Unicode

[英]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&#223;en&#8230;
>>> s='auszuschließen…'
>>> s
'auszuschließen…'
>>> print(s)
auszuschließen…
>>> b=s.encode('ascii','xmlcharrefreplace')
>>> b
b'auszuschlie&#223;en&#8230;'
>>> print(b)
b'auszuschlie&#223;en&#8230;'
>>> b.decode()
'auszuschlie&#223;en&#8230;'
>>> print(b.decode())
auszuschlie&#223;en&#8230;

您從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM