2017-08-04 6 views
1

を作るに変換私はこのPythonのUnicodeは「のu000A」を含む中国のエラー

を試してみました私は \\uOOOAを変換することができますどのように、文字列を修正するために、この文字列を変換したい「\ n」をせずに中国の間違ったコード

# string 
s = u'蛋疼\\u000A egg烦' 

を作ります

s.encode('utf-8').decode('unicode-escape') 

これは\\u000Aを修正しますが、読めないちんぷんかんぷんに中国語テキストを回す:

èç¼ 
eggç¦ 

HTMLページのJavascriptコードから文字列を取得しました。

+0

は、おそらくこのJSONですか? –

+4

言い換えれば、*このデータはどこから来たのでしょうか?それを抽出するためのより良い方法を使用することで、おそらくこれを避けることができます。 –

+0

いいえ、これはユニコード文字列に '\\ u000A'と中国語が含まれているため、 '\\ u000A'を '\ n'に変換して中国語を変更しません。 –

答えて

1

unicode-escapeは、エスケープされないバイトをLatin-1と最初にデコードします。 Javascriptデータに使用する方法も間違っています。 PythonとJavascriptの構文は微妙に異なり、間違った結果が得られる場合があります。

代わりに、データをJSONとして扱います。 Javascriptの文字列は、常にあなたが引用保持提供、JSON文字列型として扱うことができます。

s = u'"蛋疼\\u000A egg烦"' 

なお、その文字列が開始され、今""で終わります。 HTMLページの元のJavascript文字列の定義も同様です。

HTMLページからデータを抽出し、json.loads()にこれを渡し、その後、二重引用符を保つ:

>>> import json 
>>> s = u'"蛋疼\\u000A egg烦"' 
>>> json.loads(s) 
u'\u86cb\u75bc\n egg\u70e6' 
>>> print json.loads(s) 
蛋疼 
egg烦 
+0

ありがとうございます。 –

-2

は例によって学習:

==> python 
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
>>> # original 
... 
>>> s= u'蛋疼\\u000A egg烦' 
>>> s 
'蛋疼\\u000A egg烦' 
>>> print(s) 
蛋疼\u000A egg烦 
>>> 
>>> 
>>> # answer 
... 
>>> s= u'蛋疼\u000A egg烦' 
>>> s 
'蛋疼\n egg烦' 
>>> print(s) 
蛋疼 
egg烦 
>>> 
+0

**実際に掻き取ったデータには、リテラルのバックスラッシュ「u」と4桁の16進数が含まれています。これは、Python文字列リテラルを構築する方法に関する質問ではありません。 –

+0

@MartijnPieters私は**アサイン**の**割り当て** 's = u 'が忍び\\ u000A卵烦''元の質問では、ごめんなさい。 – JosefZ

+0

はい、それは他の場所から来た実際のデータを再現するためにMCVEを作成するだけです。 –

関連する問題