これを取得するには複数の方法があるため、これらのどれが問題なのかわかりません。そのため、すべての可能性について説明します。
まず、ファイルが実際に UTF-8 として保存されていることを確認します。デフォルトでは、メモ帳やその他の多くのエディタはファイルをシステム エンコーディングで保存します。これはおそらく cp1252 のようなものです。「正しく見える」、「スクリプトがこれらの文字をファイルに書き込んで、そのファイルをメモ帳で開くと、正しく見える」というテストを行っても、何もわかりません。明らかに、cp1252 ファイルを保存して cp1252 として開くと、正しく表示されます。
先頭に「coding=utf-8」を追加するだけでは、ファイルの保存方法が魔法のように変わることはありません (emacs などのいくつかのスマートなエディターを除く)。実際には別のものであっても、「このソースファイルは UTF-8 です」と Python に伝えるだけです。そのため、Python は cp1252 を UTF-8 として解釈し、線画文字の代わりに a-with-circumflex のように文字化けします。
特に、ファイルが UTF-8 であるかどうかを確認する方法さえわからない場合は、修正方法はなおさらです\u250c
。┌─
str
第二に、ASCII 以外の文字をリテラルに入れたいと思うことはほとんどありません。unicode
正当な理由がない限り、リテラルを使用してください。
その上、 を渡すdraw.text
とstr
、PIL はそれをデフォルトの文字セット (おそらく UTF-8 ではない) でデコードします。したがって、これまでのすべてが正しかったとしても、コードは cp1252 として解析される UTF-8 を渡していたので、もう一度 mojibake します。unicode
リテラルを使用すると、この問題を完全に回避できます。それ以外の場合は、渡す必要がありますtext.decode('utf-8')
。
それをすべてまとめると:
text = u"\u250c\u2500\u2510\u2502\u2514\u2518\u255e\u2550\u2561\u2564\u2567\u2558\u255b"
ファイルは純粋な ASCII であるため、ファイルの保存に使用されるコーディング宣言と実際のエンコーディングは重要ではありません。
ただし、多くのフォントには線画文字がないため、文字のない四角形が表示される場合があります。あなたのフォントが何かはわかりませんがcour.ttf
、私のシステムには 2 つの Courier TTF フォントが見つかりました。1 つは古い Mac OS のもので、もう 1 つは Windows XP のもので、どちらにもありません。それが問題である場合は、明らかに別のフォントを使用する必要があります。
もう 1 つの可能性: 上記の修正を行ってもまだ mojibake を取得している場合、それcour.ttf
は Unicode 順のフォント ファイルではなく、古い TTF 順の 1 つである可能性があります。フォント ビューアに、ファイルの TTF 順序が表示されます。(Windowsには1つ付属していると確信していますが、Windows 7のどこにあるのか、どのように使用するのかわかりません。)次に、フォントをロードするときに'unic'
as の代わりに正しいものを渡す必要があります。encoding
しかし、ほとんどのフォントには線描画文字が含まれていないかunic
、symb
おそらく含まれていません。