私は無料のWebホストを使用していますが、Pythonフレームワークを使用しないことを選択しており、ソースファイルに保存されている漢字を(utf-8でエンコードされたファイルを保存するためにemacsを使用して)結果のHTMLページに印刷しようとして立ち往生しています。UnicodeはPython3.1で「正しく機能する」と思っていたので、困惑しました。うまくいかない3つの解決策を見つけました。詳細が1つか2つ欠けているだけかもしれません。
ホストはAlwaysdataで、使い方は簡単なので、パーツの組み立て方の詳細についてはほとんどわかりません。私がしているのは、Pythonファイルをwwwフォルダーにアップロードまたは編集し(sshを使用して)、アクセス許可を変更し、ブラウザーで正しいURLを指定するだけです。
私の最初の試みは、ローカルIDLE(およびサーバーのPythonコマンドラインインタラクティブシェルでも機能します。これにより、ブラウザーに渡されたときに機能しない理由がさらに混乱します)
#!/usr/bin/python3.1
mystr = "世界好"
print("Content-Type: text/html\n\n")
print("""<!DOCTYPE html>
<html><head><meta charset="utf-8"></head>
<body>""")
print(mystr)
エラーは次のとおりです。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)
それから私は試しました
print(mystr.encode("utf-8"))
エラーは発生しませんが、ブラウザへの望ましくない出力は次のとおりです。
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
3番目に、次の行が追加されましたが、エラーが発生しました。
import sys
sys.setdefaultencoding("utf-8")
AttributeError: 'module' object has no attribute 'setdefaultencoding'
最後に、printをf.writeに置き換えます。
import codecs
f = codecs.open(sys.stdout, "w", "utf-8")
mystr = "你好世界"
...
f.write(mystr)
エラー:
TypeError: invalid file: <_io.TextIOWrapper name='<stdout>'
encoding='ANSI_X3.4-1968'>
出力を機能させるにはどうすればよいですか?迅速な修正のためにフレームワークを使用する必要がありますか?