2017-03-02 28 views
3

これを行う方法はありますか?Python。エスケープされたutf文字列をutf-stringに変換する

rawstr = r"3 \u176? \u177? 0.2\u176? (2\u952?)" 
#required str is 3 ° ± 0.2° (2θ). 

質問は 'UTF-8' にrawstr変換する方法である

In [1] rawstr.unescape()? 
Out[1]: '3° ± 0.2° 2θ' 

のようなもの。

もっと分かりやすいように私の答えをご覧ください。

私が今やっていることよりも良い選択肢なら、答えてください。

+1

をインストールしました。残念ながら、あなたの生の文字列には無効なUnicodeエスケープが含まれているので、うまくいきません( '\ u176?'を参照しています、 '\ uXXXX'の形にしてください) – Bakuriu

+0

あるいは、 )、 '.decode( 'unicode-escape')'を使用しますが、これは '\ u176? 'が有効なユニコードエスケープではないため失敗します。 – Bakuriu

+0

ありがとうございます。私は私のためにデコーダを書く必要があると思う。 – Rahul

答えて

1

あなたは窓やpythonnet上にある場合は、あなたが `codecs.raw_unicode_escape_decode`を使用することができ

import clr 
clr.AddReference("System") 
clr.AddReference("System.Windows.Forms") 
import System.Windows.Forms as WinForms 

def rtf_to_text(rtf_str): 
    """Converts rtf to text""" 

    rtf = r"{\rtf1\ansi\ansicpg1252" + '\n' + rtf_str + '\n' + '}' 
    richTextBox = WinForms.RichTextBox() 
    richTextBox.Rtf = rtf 
    return richTextBox.Text 

print(rtf_to_text(r'3 \u176? \u177? 0.2\u176? (2\u952?)')) 
-->'3 ° ± 0.2° (2θ)' 
2

ありがとうございます! Pythonの2のために

のpython 3については
print r'your string'.decode('string_escape') 

、あなたはバイトとしてそれを変換した後、decodeを使用する必要があります。これはあなたのケースでは動作しないこと

print(rb'your string'.decode('unicode_escape')) 

注意、シンボルが正しくエスケープされていないため( "通常の"方法で印刷しても動作しません)


あなたの文字列は次のようにする必要があります:あなたはpythonでstringbytesに変換する必要がある場合、あなたはbytes機能を使用することができることを

rb'3\u00B0 \u00b1 0.2\u00B0 2\u03B8' 

注意。

my_str = r'3\u00B0 \u00b1 0.2\u00B0 2\u03B8' 
my_bytes = bytes(my_str, 'utf-8') 
print my_bytes.decode('string_escape') # python 2 
print(my_bytes.decode('unicode_escape')) # python 3 
+0

私はansiのテキストだと思います。 – Rahul

+0

"ANSIテキスト"は明確な用語ではありません。 Windowsでは、以前は誤ってシステムのローカルデフォルトエンコーディングを参照していましたが、これは特定のコードページ(一般的には1252ですが、437,850などのすべてが表示されますが、読者のロケール)。 – tripleee

関連する問題