3

ユニコードに関するいくつかのスレッドを読みました。

私はPython 2.7.2を使用していますが、将来のprint_functionを使用しています(生のprintステートメントは私にとって非常に混乱しているため..)

だからここにいくつかのコードがあります:

# -*- coding: L9 -*-
from __future__ import print_function, unicode_literals

今、次のようなものを印刷すると

print("öäüߧ€")

それは完全に機能します。ただし、はい、私はPythonにまったく慣れていません.Unicode文字列を出力する関数を宣言すると、スクリプトが吹き飛ばされます

def foo():
    print("öäü߀")

foo()

Traceback (most recent call last):
  File "C:\Python27\test1.py", line 7, in <module>
    foo()
  File "C:\Python27\test1.py", line 5, in foo
    print("÷õ³▀Ç")
  File "C:\Python27\lib\encodings\cp850.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\x80' in position 4: character maps to <undefined>

このエラーとユニコードを一般的に処理する最良の方法は何ですか? 代わりに 2.7 の print ステートメントを使用する必要がありますか?

4

3 に答える 3

1

それprint("öäü߀".encode('L9'))があなたの問題を解決すると思います。

于 2013-10-09T13:39:47.907 に答える
0

コンソール コード ページは、古い DOS コンソール プログラムとの互換性のために従来の "OEM" コード ページを使用しますが、残りの Windows は最新の文字をサポートする更新されたコード ページを使用しますが、地域によって異なります。あなたの場合、コンソールは使用しcp850、GUIプログラムは使用しますcp1252cp850はユーロ文字をサポートしていないため、Python はコンソールに文字を出力しようとすると例外を発生させます。chcp 1252ユーロを機能させる必要がある場合は、スクリプトを実行する前に実行できます。ただし、コンソールのフォントがその文字をサポートしていることを確認してください。

ところで、L9!=cp1252いずれか。

コンソールからの印刷がユーロで機能したことは確かですか? をカット アンド ペーストするprintと、コード ページが 850 の場合は次のようになりますが、chcp 1252.

>>> print("öäüߧ€")
öäüߧ?                 # Note the ?

エンコードチャート:

于 2013-10-09T14:17:26.630 に答える
0

これは役立つかもしれません:

print(type(s1))
s1.encode('ascii',errors='ignore') #this works
s1.decode('ascii',errors='ignore') #this does not work 

その理由は、s1.decode は Unicode を直接デコードできないため、encode への明示的な呼び出しが最初に行われますが、errors='ignore' フラグがないため、エラーが発生します。

コマンドをファイルから発行したのか、Unicode をサポートする Python プロンプトから発行したのかによって、前者ではなく後者でエラーが発生する理由が説明される場合があります。

于 2013-10-09T14:19:39.383 に答える