簡體   English   中英

將字符轉換為unicode

[英]convert character to unicode

此代碼按預期工作。 唯一的問題是,如果有unicode字符,它將轉換為ASCII。

with open('test.idx', 'w') as writefile:
    with open('test.dat') as myfile:
        mystr=myfile.read()
        for myword in mystr.split('|'):
            tow=myword, '|', mystr.index(myword)
            print >>writefile, tow

In [74]: !cat test.dat
UTF-8
जनन|1
जन्म देणे
शिक्षण|1
 क्षेत्रातील संशोधनाच्या बाजारीकरणा बाबतीत व्यक्त केलेली 
पूर्व|1
 पगड्यामुळे

In [75]: !cat test.idx
('UTF-8\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa4\xa8', '|', 0)

我希望看到unicode而不是轉義代碼。

你創建了一個元組:

tow=myword, '|', mystr.index(myword)

這不是一個字符串對象,它是一個包含三個其他對象的元組,其中兩個是字符串,一個是整數。

然后,當您將該元組寫入文件時,Python必須將其轉換為字符串。 轉換任何Python容器(無論是元組,列表,集合還是字典)都將使用所包含對象的repr()表示。 對於字符串,這意味着只允許和顯示可打印的ASCII字符,其他所有字符都使用轉義序列,通常是\\xhh表單。

如果您的用例輸出不正確,則需要自己進行字符串轉換。 您可以使用字符串格式:

tow = '{}|{}'.format(myword, mystr.index(myword))

如果你正在生產很多| - 分離數據,您可能需要查看csv模塊來處理分隔符和文件寫入。

當您將數據存儲在元組中時,您將看到repr表示。 要匹配您的預期輸出,請使用str.join:

     print >>writefile, "".join(map(str,tow))

輸出文件將包含:

UTF-8
जनन|0
1
जन्म देणे
शिक्षण|16
1
 क्षेत्रातील संशोधनाच्या बाजारीकरणा बाबतीत व्यक्त केलेली 
पूर्व|63
1
 पगड्यामुळे|239

如果在代碼中添加print(tow) ,您將看到有元組。

('UTF-8\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa4\xa8', '|', 0)
('1\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xae \xe0\xa4\xa6\xe0\xa5\x87\xe0\xa4\xa3\xe0\xa5\x87\n\xe0\xa4\xb6\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xa3', '|', 16)
('1\n \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa5\x87\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa4\xe0\xa5\x80\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xb6\xe0\xa5\x8b\xe0\xa4\xa7\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x9a\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\x9c\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x80\xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa3\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa4\xa4\xe0\xa5\x80\xe0\xa4\xa4 \xe0\xa4\xb5\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa5\x87\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\xb2\xe0\xa5\x80 \n\xe0\xa4\xaa\xe0\xa5\x82\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb5', '|', 63)
('1\n \xe0\xa4\xaa\xe0\xa4\x97\xe0\xa4\xa1\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\xb3\xe0\xa5\x87', '|', 239)

你也有utf-8編碼的字符串而不是unicode,如果你從tow中打印出單個元素,你也會看到正確的輸出。

暫無
暫無

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

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