2016-03-25 20 views
-3

は、ここに私のコードです。(Pythonのバージョン3.5)UTF-8文字列を中国語に変換するには?

log =os.path.join(sys.path[0],'log') 
f=open(log,'r',encoding='utf-8') 
s=f.read() 
r=s.decode('utf-8') 

私は、エラーメッセージが表示されます。この時点で。

AttributeError: 'str' object has no attribute 'decode' 

そしてlogファイルがこれを好むことがあります。実際に

\/div>\n\t<\/div>\n\t<\/div>\n <!-- <div class=\"search_feedback\">\n <p>\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5<a href=\"javascript:void(0);\" suda-data=\"key=tblog_search_v4.1&value=weibo_suggest\" node-type=\"suggest\">\u53d1\u8868\u610f\u89c1<\/a>\u6216\u60a8\u53ef\u4ee5\u5173\u6ce8\u840c\u5c0f\u641c<a href=\"http:\/\/weibo.com\/wbsearch\" suda-data=\"key=tblog_search_v4.1&value=weibo_xiaosou\" title=\"\u6b22\u8fce\u8c03\u620f\u6700\u840c\u5b98\u535a\u5c4c\u4e1d~~\">@\u5fae\u535a\u641c\u7d22<\/a>\u83b7\u53d6\u641c\u7d22\u6280\u5de7\u3002<\/p>\n <\/div> -->\n<\/div>"})</script> 
<script>STK && STK.pageletM && STK.pageletM.view({"pid":"pl_common_searchHistory","js":["apps\/search_v6\/js\/pl\/common\/searchHistory.js?version=20160324190000"],"css":["appstyle\/searchV45\/css_v6\/pl\/pl_history.css?version=20160324190000"],"html":""})</script> 

、それはHTMLの組み合わせと、それは'"、通訳を多く含んでいるので、私は思うexecを使用してUTF-8 characters.WhenですエラーSyntaxError: EOL while scanning string literalを返しました。

解決方法はありますか?

+1

あなたはpython 3 's.encode(" utf-8 ")'でデコードしないでstrをエンコードすることができます。strはunicodeなので、それを印刷するだけです。あなたはその文字列で何をしていますか? –

+0

ありがとうございます。しかし、問題にはいくつかの変更があります。 –

+0

興味のあるものhtmlで何をしていますか? –

答えて

1

その後、bytes.decode('unicode_escape')を使用し、bytes/binaryとしてファイルを読む:

>>> b'\\">\\n <p>\\u6b22\\u8fce\\u63d0\\u4ea4'.decode('unicode_escape') 
'">\n <p>欢迎提交' 

このようにあなたができる:

log = os.path.join(sys.path[0],'log') 
with open(log, 'rb') as f: 
    s = f.read() 
    print(s.decode('unicode_escape')) 

をまた、あなたは文字列の完全なPythonののreprを持っている場合は、"\u8f6c\u53d1"を言います(あなたの質問の文字列とは異なります)、ast.literal_eval()

>>> s = '"\\u8f6c\\u53d1"' 
>>> print(s) 
"\u8f6c\u53d1" 
>>> import ast 
>>> u = ast.literal_eval(s) 
>>> print(u) 
转发 
+0

@程书意私の編集を参照してください。 –

+0

@程书意あなたのコメントの後に追加した最初の部分:D 'bytes.decode( 'unicode_escape')' –

+0

多分、この文字列は少し複雑です。 –

0

次の情報が役立つ場合があります。私はthis sentence with some UTF-8 characters\u8f6c\u53d1推測

In [25]: s='this sentence with some UTF-8 characters\u8f6c\u53d1'.encode('utf-8') 

In [26]: s.decode('utf-8') 
Out[26]: 'this sentence with some UTF-8 characters转发' 

In [34]: type('this sentence with some UTF-8 characters\u8f6c\u53d1') 
Out[34]: builtins.str 

In [35]: type('this sentence with some UTF-8 characters\u8f6c\u53d1'.encode('utf-8')) 
Out[35]: builtins.bytes 

In [36]: type('this sentence with some UTF-8 characters\u8f6c\u53d1'.encode('utf-8').decode('utf-8')) 
Out[36]: builtins.str 

はAとなどのために(アスキーがUnicodeで同じである) Pythonは72(Aのための何でもUnicodeコードポイント)を保持している場合、私はわからないUnicodeコードポイントを含む文字列です。..

0

プログラムの先頭に '#coding:utf8'を使用してください。