簡體   English   中英

將Unicode對象與非ASCII符號轉換為字符串對象(在Python中)

[英]Converting Unicode objects with non-ASCII symbols in them into strings objects (in Python)

我想通過在線服務發送中文字符,並返回生成的英文字符串。 我正在使用簡單的JSON和urllib。

是的,我在宣布。

# -*- coding: utf-8 -*-

在我的代碼之上。

現在一切正常,如果我給urllib一個字符串類型的對象,即使該對象包含什么是Unicode信息。 我的功能叫做translate

例如:

stringtest1 = '無與倫比的美麗'

print translate(stringtest1)

導致正確的翻譯和做

type(stringtest1) 

確認這是一個字符串對象。

但如果這樣做

stringtest1 = u'無與倫比的美麗'

並嘗試使用我的翻譯功能我收到此錯誤:

  File "C:\Python27\lib\urllib.py", line 1275, in urlencode
    v = quote_plus(str(v))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-8: ordinal not in range(128)

經過一番研究,似乎這是一個常見的問題:

現在,如果我輸入一個腳本

stringtest1 = '無與倫比的美麗' 
stringtest2 = u'無與倫比的美麗'
print 'stringtest1',stringtest1
print 'stringtest2',stringtest2

執行它返回:

stringtest1 無與倫比的美麗
stringtest2 無與倫比的美麗

但只需在控制台中鍵入變量:

>>> stringtest1
'\xe7\x84\xa1\xe8\x88\x87\xe5\x80\xab\xe6\xaf\x94\xe7\x9a\x84\xe7\xbe\x8e\xe9\xba\x97'
>>> stringtest2
u'\u7121\u8207\u502b\u6bd4\u7684\u7f8e\u9e97'

抓住我的。

我的問題是我無法控制要翻譯的信息如何影響我的功能。 而且似乎我必須以Unicode格式提供它,該函數不接受它。

那么,我如何將一件事轉換成另一件事呢?

我已經閱讀了Stack Overflow問題將Unicode轉換為Python中的字符串(包含額外的符號)

但這不是我追求的。 Urllib接受字符串對象但不接受Unicode對象,兩者都包含相同的信息

好吧,至少在Web應用程序的眼中,我發送的是未更改的信息,我不確定它們是否仍然是Python中的等價物。

當您獲得一個unicode對象並想要從中返回UTF-8編碼的字節字符串時,請使用theobject.encode('utf8')

你不知道傳入的對象是str還是unicode似乎很奇怪 - 當然你也控制了該函數的調用站點了嗎?! 但如果情況確實如此,無論出於什么奇怪的原因,你可能需要這樣的東西:

def ensureutf8(s):
    if isinstance(s, unicode):
        s = s.encode('utf8')
    return s

它只是有條件地編碼,也就是說,如果它接收到一個unicode對象,而不是它接收的對象已經是一個字節串。 它在任何一種情況下都返回一個字節串。

順便說一句,你的混淆的一部分似乎是因為你不知道只是在翻譯提示下輸入一個表達式會顯示你的repr ,這與你得到的print效果不同;-)。

暫無
暫無

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

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