私はあなたが何をしたいのかという疑問から完全には分からないので、私は両方のケースをカバーするつもりです。
ケース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
注意です。
'\ u063a \ u064a \ u0646 \ u064a \ u0627'は、バックスラッシュが実際にエスケープされるASCII文字列ですか? –
ここに文字列を出力していますか?コンソールであれば、コンソールは完全なユニコードをサポートしていない可能性があります。 –
@ IzaakvanDongen:実際にはエスケープされていません。私は速い 'sを走らせるべきですか?それを印刷しようとする前に、16進文字列の( "\ u"、 "\\ u") 'を置き換えますか? –