PythonでUnicode文字を印刷する方法は?


115

英語の単語がロシア語とフランス語の翻訳を指す辞書を作りたいです。

PythonでUnicode文字を出力するにはどうすればよいですか?また、Unicode文字を変数にどのように格納しますか?


これは役に立ちますか: docs.python.org/howto/unicode.html
paulsm4

見ていこちらを。文字列に接頭辞を付けるとu、Pythonは文字列をUnicode文字列リテラルと見なすことができます。
SRI、

回答:


109

PythonソースコードにUnicode文字を含めるには、文字列の形式でUnicodeエスケープ文字を使用し\u0123、文字列リテラルの前に「u」を付けることができます。

Pythonインタラクティブコンソールで実行する例を次に示します。

>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия

このように宣言された文字列は、PythonのUnicodeドキュメントで説明されているように、Unicodeタイプの変数です。

上記のコマンドを実行してもテキストが正しく表示されない場合は、端末がUnicode文字を表示できない可能性があります。

ファイルからのUnicodeデータの読み取りについては、次の回答を参照してください。

Pythonでファイルから文字を読み取る


4
ええ、あなたあなたのコードをUnicodeエンコードされたテキストファイルで書くことができますが、多くのエディタとツールはそれらを扱うのに問題があります。多くの異なるプラットフォームでソースコードを操作した経験は、ソースコードをASCIIに保ち、Unicodeエスケープを使用するのが最善であるということです。
Matt Ryall

3
@MattRyall、同意しますが、ロシアの開発者のチームはロシア語でコメントやドキュメント文字列を書きたいと思うかもしれません。言語プロジェクトの場合、これは良いオプションです。
Johan Lundberg、2012年

3
ただし、これは文字列だけを印刷する場合にのみ機能することに注意してください。他のオブジェクトでラップされている場合は、エスケープコードが表示されます。たとえば、「print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']」を試してください。
btubbs 2014年

3
文字列に保存した場合はどうなりますmystrか?それを印刷する方法は?
cqcn1991、2015

1
@CarloWood一番上の答え は、あなたが望むものを正確に伝えます。Justprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

Pythonで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: 

チェックマークが表示されない場合は、端末の設定やストリームリダイレクトで行っているような問題が他にある可能性があります。

Unicode文字をファイルに保存します。

これをファイルに保存します: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をファイルに保存しました。


@ ofer.sheffer奇妙なことに、私はここで反対の問題を解決しようとしています。
Chris H

40

print()Unicodeにしようとしていて、ASCIIコーデックエラーが発生する場合はこのページを確認してください。TLDRはexport PYTHONIOENCODING=UTF-8Pythonを起動する前に行われます(この変数は、コンソールが文字列データをエンコードしようとするバイトのシーケンスを制御します)。内部的には、Python3はデフォルトでUTF-8を使用します(Unicode HOWTOを参照))そのため、それは問題ではありません。他の回答やコメントにあるように、文字列にUnicodeを入れるだけです。問題が発生するのは、このデータをコンソールに出力しようとしたときです。Pythonは、コンソールはASCIIしか処理できないと考えています。他の回答のいくつかは、「最初にファイルに書き込む」と言いますが、そうするためにエンコード(UTF-8)を指定していることに注意してください(したがって、Pythonは書き込みで何も変更しません)。次に、メソッドを使用して読み取ります。エンコーディングを考慮せずにバイトを吐き出すファイル。これが機能する理由です。


ありがとうございました!asciitreeパッケージを使用して結果をファイルに書き込むときに、問題が発生しました。これで解決しました。
PALThingbø

どうもありがとうございます。グーグルで過ごした時間、これを見つけてうれしい。
CharlyDelta 2018年

17

Python 2では、Unicode文字列をで宣言します。たとえば、uin u"猫"とuse 、およびを使用decode()encode()て、それぞれunicodeとの間で変換を行います。

Python 3の方がかなり簡単です。非常に優れた概要がここにあります。そのプレゼンテーションは私に多くのことを明らかにしました。


1
ビデオリンクのThx。とても便利です。
2015年

1
これは非ビデオとしてこちらから入手することもできます:Pragmatic Unicode、または、どうすれば痛みを止められますか?(Pycon2012)nedbatchelder.com/text/unipain.html
トムHundt

7

これがGoogleがこのトピックを検索したときの最初のスタックオーバーフロー結果であることを考えると、uUnicode文字列のプレフィックスはPython 3ではオプションであることを述べています(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'

ありがとうございました!まさに私が検索したもの:python2とpython3の両方の文字列内にUnicode文字を出力する普遍的な方法。
JenyaKh

クランプバージョンはPhyton 2でも機能するはずです-クランプはオプションであり、したがって許可されます。
Alexander Stohr

4

私はWindowsでポータブルwinpythonを使用しています。これにはIPython QTコンソールが含まれており、次のことを達成できます。

>>>print ("結婚")
結婚

>>>print ("おはよう")
おはよう

>>>str = "結婚"


>>>print (str)
結婚

ユニコード文字を表示するには、コンソールインタープリターがユニコードをサポートしている必要があります。


3

まだ追加されていないもう1つ

Python 2で、Unicodeを持つ変数を出力してを使用する場合は.format()、これを実行します(フォーマットされている基本文字列を、次のようにしてUnicode文字列にしu''ます:

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal

3

これにより、PythonでのUTF-8印刷が修正されます。

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)

1

'+''000'に置き換えます。たとえば、「U + 1F600」「U0001F600」になり、Unicodeコードの前に「\」を付けて印刷します。例:

>>> print("Learning : ", "\U0001F40D")
Learning :  🐍
>>> 

これを確認してください多分それはpython unicode emojiを助けるでしょう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.