2017-08-21 17 views
0

は、私が(16進数で)Unicodeの序数の文字列を持っているので、同様に進文字列の変換:Unicode文字列(パイソン)

\u063a\u064a\u0646\u064a\u0627

それはアラビア文字列غينياのユニコードrepsentationだ(の得アラビア語のlorem ipsumジェネレータ)。

ユニコードの16進数文字列をغينياに変換します。私はprint u'%s' % "\u063a\u064a\u0646\u064a\u0627"hereを指摘)を試しましたが、単にシンボルではなく16進数の形式を返します。 print word.replace("\u","\\u")はその仕事もしません。何をすべきか?

+1

'\ u063a \ u064a \ u0646 \ u064a \ u0627'は、バックスラッシュが実際にエスケープされるASCII文字列ですか? –

+0

ここに文字列を出力していますか?コンソールであれば、コンソールは完全なユニコードをサポートしていない可能性があります。 –

+0

@ IzaakvanDongen:実際にはエスケープされていません。私は速い 'sを走らせるべきですか?それを印刷しようとする前に、16進文字列の( "\ u"、 "\\ u") 'を置き換えますか? –

答えて

1

私はあなたが何をしたいのかという疑問から完全には分からないので、私は両方のケースをカバーするつもりです。

ケース1:Unicodeリテラル構文を使用して、コードからアラビア文字列を出力したいだけです。このケースでは、Uを使用して文字列リテラル接頭辞必要がありますし、雨のように右になります:これはおそらく、短い以外

print u'%s' % s 

と同じことをするだろう

s = u"\u063a\u064a\u0646\u064a\u0627" 
print(s) 

。この場合、何も変更されていない、つまりu'%s' % s == sなので、それ以外の場合は空文字列をあなたの形成された文字列にフォーマットしても意味をなさない。

ケース2:Unicode文字列として評価する他のソースからのエスケープ文字列があります。これはあなたがprint u'%s' %としようとしているようなものです。これは、関数呼び出しのようなものを許可していませんliteral_evalとして、evalとは異なり、これは安全であることを

import ast 
s = r"\u063a\u064a\u0646\u064a\u0627" 
print ast.literal_eval("u'{}'".format(s)) 

注意して行うことができます。また、sがr接頭文字列であることも見てください。したがって、バックスラッシュはエスケープされませんが、文字通りバックスラッシュ文字です。ケース1の

コードの両方の部分が正しく出力

غينيا 

いくつかの精緻化print u'%s' % s上の文字列が既にエスケープされている場合、それはリテラルのUnicodeのように評価されませんので、これは、動作が異なりますフォーマット。これは、Pythonが最初に評価されたときにUnicodeをUnicodeのリテラルのような式(sなど)から実際に構築するためです。エスケープされている場合、通常の文字列操作を使用すると範囲外になるので、文字列を正しく印刷するには、literal_evalを使用してと評価する必要があります。あなたは

print u'%s' % s 

を実行すると、出力は、これはUnicodeオブジェクトの表現が、いくつかのバックスラッシュと文字を文字通りASCII文字列ではないことを

\u063a\u064a\u0646\u064a\u0627 

注意です。

+0

'ケース1 'は' print'%s '%s'と同じです( 's =' \ u063a \ u064a \ u0646 \ u064a \ u0627'') –

+0

私は誤読している可能性があります。もう少し詳しく説明します:) –

関連する問題