4

私は単に中国語のtxtファイルをインポートしてコンテンツを印刷しようとしていました. これは、簡体字中国語のウェブからコピーしたtxtファイルの内容です:http://stock.hexun.com/2013-06-01/154742801.html

最初に、私はこれを試しました:

userinput = raw_input('Enter the name of a file')
f=open(userinput,'r')
print f.read()
f.close()

ファイルを開いて印刷することはできますが、表示される内容が文字化けしています。次に、エンコーディングで次のものを試しました:

#coding=UTF-8
userinput = raw_input('Enter the name of a file')
import codecs
f= codecs.open(userinput,"r","UTF-8")
str1=f.read()
print str1
f.close()

ただし、エラーメッセージが表示されます。UnicodeEncodeError: 'cp950 コーデックは位置 50 の文字 u'\u76d8' をエンコードできません: 不正なマルチバイト シーケンス。

なぜそのエラーが発生したのですか?それを解決する方法は?Big5、cp950 などの他のユニコードを試しましたが、まだ機能しません。

4

5 に答える 5

6

文字を表示するために使用している端末システムです。Windows 7 で IDLE を使用すると、正常に動作します。

>>> val = u'\u76d8'
>>> print val
盘

しかし、私が使用するcmd.exeと、エラーが発生します。

Unicode エンコーディングをサポートする端末表示方法を使用します。

于 2013-10-23T10:20:25.607 に答える
1

Python (少なくとも Python 3.0 より前) は、①バイト配列と②文字配列の 2 種類の文字列を認識します。

②のような文字はUnicodeで、このような文字列の型を とも呼びunicodeます。

① のバイト ( strPython で名前が付けられた型)、印刷可能な文字列またはその他 (バイナリ データ) にすることができます。印刷可能な文字列の場合は、Unicode 文字列のエンコード バージョン (UTF-8、latin-1 など) にすることもできます。次に、数バイトで 1 つの文字を表すことができます。

あなたのユースケースでは、ファイルをバイトのリストとして読み取ることを提案します。

with open('filename.txt') as inputFile:
    bytes = inputFile.read()

次に、ファイルで使用されているエンコーディングからデコードして、そのバイト配列をまともな Unicode 文字列に変換します (それを見つける必要があります!)。

unicodeText = bytes.decode('utf-8')

次に、それを印刷します。

print unicodeText

最後のステップは、出力デバイス (xterm など) の機能によって異なります。Unicode 文字を表示できる場合は、すべて問題なく、文字が適切に表示されます。しかし、Unicode に対応していない可能性があります。または、Python がその機能について十分に理解していない可能性が高いため、エラー メッセージが表示されます。これは、出力をファイルにリダイレクトするか、2 番目のプロセスにパイプする場合にも発生します。

この問題を回避するには、Unicode 文字列を再度バイト配列に変換し、任意のエンコーディングを選択します。

print unicodeText.encode('utf-8')

このようにして、すべての端末、出力ファイル、および 2 番目のプロセス (パイピング時) が処理できるバイトのみを出力します。

もちろん、入力と出力のエンコーディングが同じであれば、何もデコードしてエンコードする必要はありません。しかし、問題が発生したため、エンコーディングが異なる可能性が高いため、これらの 2 つの手順を実行する必要があります。

于 2013-10-23T10:24:07.927 に答える
0

コード ページ 936は、文字 0x76D8 (0xC5CC にエンコード) を持つ唯一のものです。gbk または cp936 を使用する必要があります

于 2013-10-23T10:15:46.120 に答える
0
with open('chinese.txt','r+b') as inputFile:
    bytes = inputFile.read()
    print(bytes.decode('utf8'))
于 2018-02-12T15:11:38.150 に答える
-1

ちょうど試して:

f=open(userinput,'r')
print f.read().decode('gb18030').encode('u8')
于 2013-10-23T10:16:53.700 に答える