2016-05-10 36 views
0

は、ここではいくつかの例です(ユニコード)文字列:ユニコード文字列をPythonでリテラル文字列に変換するには?

a = u'\u03c3\u03c4\u03b7\u03bd \u03a0\u03bb\u03b1\u03c4\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5' 
b = u'\u010deprav so mu doma\u010di in strici duhovniki odtegovali denarno pomo\u010d . Kljub temu mu je uspelo' 
c = u'sovi\xe9ticas excepto Georgia , inclusive las 3 rep\xfablicas que hab\xedan' 

それはこのようになりますように、私の最終目標は、バックスラッシュ(スペース)に分割することです:(

split_a = [u03c3, u03c4, u03b7, u03bd, ,u03a0, u03bb, u03b1, u03c4, u03b5, u03af, u03b1, ,u03c4, u03bf, u03c5] 
split_b = ['', 'u010deprav', 'so', 'mu', 'doma', 'u010di', 'in', 'strici', 'duhovniki' odtegovali denarno pomo', 'u010d', '.', 'Kljub', 'temu', 'mu', 'je', 'uspelo'] 
split_c = ['sovi', 'xe9ticas', 'excepto', 'Georgia', ',', 'inclusive', 'las', '3', 'rep', 'xfablicas', 'que', 'hab', 'xedan'] 

を空スペースとバックスラッシュの両方がある場所は全く問題ありません)。

は、私はこれを使用して分割しようとすると:

a.split("\\")

は、それがすべてで文字列を変更しません。

この例ではhereが見えましたが、私は文字列リテラル文字列(rを使用)を作成する必要があると思います。しかし、大規模な文字列をすべてのリテラル文字列に変換する方法はわかりません。

私がそれを検索したとき、私はhereを得ました。しかし、a.encode('latin-1').decode('utf-8')を実行すると、コンパイラでエラーが発生します。それがスローするエラーは'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256)

です。私はユニコード文字列のリストを取得し、プログラムで反復して文字列リテラルを作成し、バックスラッシュで分割するにはどうすればよいですか?

+0

Pythonのインタープリタ言語であるため、Pythonのインタープリタはエラーをスロー。 – linusg

+0

あなたは私のレベルより少し上だと思うが、情報に感謝する! –

答えて

1

あなたはそのエスケープ表現にUnicode文字列を変換するためにunicode_escapeコードを使用することができます。

split_a = a.encode('unicode_escape').split('\\') 

出力:

['', 
'u03c3', 
'u03c4', 
'u03b7', 
'u03bd ', 
'u03a0', 
'u03bb', 
'u03b1', 
'u03c4', 
'u03b5', 
'u03af', 
'u03b1 ', 
'u03c4', 
'u03bf', 
'u03c5'] 
+0

これは私が 'split_a'リストを反復し、さらに' '(space)を' split'すると私にとってはうまくいったのです。 –

3

文字列要素ごとに1つのUnicodeコードポイントが既に存在するUnicode文字列があります。 '\\'は、実際の内容ではなく、コンソールに表示される文字列の表示に過ぎません。

それから番号のリストを作るためには、実際には非常に簡単です:

split_a = [ord(c) for c in a] 

あなたが進値に続く文字uからなる文字列の束を作るために必要がある場合は、それがわずかにもっと複雑です:

split_a = ', '.join('u' + ('%04x' % ord(c)) for c in a) 
+0

2番目の問題は上記の私の問題を解決しました。私はいくつかのサンプルのユニコード文字列を追加するように私の質問を編集しました。他の種類の文字列の解決策があれば教えてください。 –

+0

似たような解決策を提出しようとしていたので、後ほどコメントを追加します。未知のエンコーディングの文字の値だけを表示するにはもう少し作業をしなければなりません。具体的には、OPの例では、スペース文字を ""、対 "u0020"と表示します。 – Christian

+0

@python_in_troubleうわー、これはまったく異なる問題です、もっと複雑です。 –

関連する問題