簡體   English   中英

在度數符號之前獲取一個字符

[英]Getting a  character before the degree symbol

我正在嘗試將度數符號連接到一個字符串,以便我可以將其寫入 Word 文檔。 我試過這樣做。

degreeChar = u'\N{DEGREE SIGN}'
print degreeChar.encode('UTF-8')

我從中得到的輸出是° ,我不確定為什么Â出現。 我究竟做錯了什么? 非常沮喪!

謝謝。

當你這樣做時:

>>> degreeChar = u'\N{DEGREE SIGN}'

degreeChar是一個單字符的 Unicode 字符串——特別是u'°'

>>> len(degreeChar)
1
>>> ord(degreeChar)
176

當您將其編碼為 UTF-8 時,您會得到一個 2 字節的 UTF-8 字節字符串:

>>> dc = degreeChar.encode('UTF-8')
>>> len(dc)
2
>>> ord(dc[0]), ord(dc[1])
(194, 176)

作為 UTF-8,那對字節表示u'°' 但是,例如,Latin-1 或 cp1252,完全相同的一對字節表示u'°' 這就是不同編碼的全部意義——相同的字節序列在不同的編碼中意味着不同的東西。 查看詳細信息:

>>> dc2 = dc.decode('latin-1')
>>> len(dc2)
2
>>> ord(dc2[0]), ord(dc2[1])
(194, 176)

那么,如果您嘗試將 UTF-8 字符串print到 cp1252 終端會發生什么? 或者將其保存為二進制文件,然后作為 cp1252 文本文件打開? 好吧,你當然會得到°


那么,你如何解決這個問題?

好吧,只是不要嘗試將 UTF-8 編碼的字節打印到 cp1252 終端! 如果 Python 已經成功猜到了您的終端的編碼,只需首先將其打印為 Unicode 字符串:

>>> print u'°'
°

如果沒有,你要么需要解決您的配置,以Python猜你的終端的編碼正確(容易對大多數* nix系統,與其說是在Windows ...),或手動指定,或者只是編碼到正確的編碼,而不是錯誤的一:

>>> print u'°'.encode('cp1252')
°
degreeChar = u'\N{DEGREE SIGN}'
print degreeChar

Unicode 應該沒問題……至少在 Windows 7 上,此命令按預期工作

°所在的文檔是用 UTF-8 編碼的,但解釋器認為它是不同的。

就我而言,我只是在該文檔中添加了 UTF-8 BOM 標記,因此解釋器會意識到內容編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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