英語とロシア語とフランス語の翻訳を指す辞書を作りたいです。
PythonでUnicode文字を印刷するにはどうすればよいですか?また、どのようにUnicode文字を変数に格納しますか?
PythonソースコードにUnicode文字を含めるには、文字列に\u0123
の形式で nicodeエスケープ文字 を使用し、文字列リテラルの前に「u」を付けることができます。
Pythonインタラクティブコンソールで実行する例を次に示します。
>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия
Python Unicode documentation で説明されているように、このように宣言された文字列はUnicodeタイプの変数です。
上記のコマンドを実行してもテキストが正しく表示されない場合は、端末でUnicode文字を表示できない可能性があります。
ファイルからUnicodeデータを読み取る方法については、次の回答を参照してください。
pythonインタプリタから直接Unicode文字を出力:
el@apollo:~$ python
Python 2.7.3
>>> print u'\u2713'
✓
Unicode文字u'\u2713'
はチェックマークです。インタプリタは画面にチェックマークを印刷します。
pythonスクリプトからUnicode文字を出力:
これをtest.pyに入れます:
#!/usr/bin/python
print("here is your checkmark: " + u'\u2713');
次のように実行します。
el@apollo:~$ python test.py
here is your checkmark: ✓
チェックマークが表示されない場合は、端末設定やストリームリダイレクトで何かをしているなど、他の場所に問題がある可能性があります。
nicode文字をファイルに保存する:
これをファイルに保存します:foo.py:
#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import codecs
import sys
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
print(u'e with obfuscation: é')
それを実行し、出力をファイルにパイプします。
python foo.py > tmp.txt
Tmp.txtを開いて中を見ると、次のように表示されます。
el@apollo:~$ cat tmp.txt
e with obfuscation: é
したがって、難読化マークが付いたUnicode eをファイルに保存しました。
print()
Unicodeを試行し、ASCIIコーデックエラーを取得しようとしている場合は、 このページ を確認してください。 pythonを起動する前にexport PYTHONIOENCODING=UTF-8
を実行します(この変数は、コンソールが文字列データをエンコードするバイトのシーケンスを制御します)。内部的には、Python3はデフォルトでUTF-8を使用します( nicode HOWTO を参照)。これは問題ではありません。他の回答やコメントに見られるように、文字列にUnicodeを入れることができます。問題が発生するのは、このデータをコンソールに送信しようとしたときです。 Pythonは、コンソールがasciiしか処理できないと考えています。他の回答のいくつかは、「最初にファイルに書き込む」と言っていますが、そのためにエンコード(UTF-8)を指定していることに注意してください(したがって、Pythonは書き込み時に何も変更しません)次に、エンコードを考慮せずにバイトを吐き出すだけのファイルを読み取るメソッドを使用します。これが機能する理由です。
Python 2では、u"猫"
のように、u
を使用してUnicode文字列を宣言し、decode()
およびencode()
を使用して、Unicodeとの間で変換します。
Python 3ではかなり簡単です。非常に優れた概要を見つけることができます here 。そのプレゼンテーションは私にとって多くのことを明らかにしました。
私はWindowsでポータブルwinpythonを使用しています。これにはIPython QTコンソールが含まれており、次のことを達成できました。
>>>print ("結婚")
結婚
>>>print ("おはよう")
おはよう
>>>str = "結婚"
>>>print (str)
結婚
ユニコード文字を表示するには、コンソールインタープリターがユニコードをサポートしている必要があります。
これにより、PythonのUTF-8印刷が修正されます。
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
まだ追加されていないもう1つだけ
Python 2で、Unicodeを持つ変数を出力し、.format()
を使用する場合は、これを行います(フォーマットされているベース文字列をu''
でUnicode文字列にします:
>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal
これがGoogleがこのトピックを検索するときの最初のスタックオーバーフローの結果であることを考慮すると、Python 3ではu
をUnicode文字列にプレフィックスすることはオプションであることに言及する必要があります(Python 2の例は上の回答からコピーされました)
Python 3(両方とも):
print('\u0420\u043e\u0441\u0441\u0438\u044f')
print(u'\u0420\u043e\u0441\u0441\u0438\u044f')
Python 2:
print u'\u0420\u043e\u0441\u0441\u0438\u044f'