0

私は簡単なファイル パーサーとライターを書きましたが、Unicode の重要性について話している記事に出くわし、入力ファイルが ASCII でエンコードされていると仮定していることに気付きました。私の状況ではまれですが。

これらのまれなケースでは、UTF-8 でエンコードされたファイルが必要です。

読み書きの方法を変更するだけで UTF-8 ファイルを操作する方法はありますか? 文字列に対して行うことは、それらを保存してから書き出すことだけなので、適切に読み取り、保存、書き込みできることを確認するだけで済みます。

さらに、ascii ファイルと UTF-8 ファイルを別々に扱い、それぞれに異なる関数を作成する必要がありますか? 私はまだASCIIファイル以外を扱ったことがなく、Unicodeの処理について読んだだけです。

4

4 に答える 4

3

Python 2 を使用している場合は、すべてのstrオブジェクトをunicodeオブジェクトに変更するだけです。Unicode オブジェクトには文字列と同じメソッドがすべてありますが、ASCII ではなく Unicode 形式でエンコードされます。http://docs.python.org/library/functions.html#unicodeを参照してください。

Python 3 を使用している場合、文字列はデフォルトで UTF-8 でエンコードされます。

于 2011-07-05T19:51:27.153 に答える
3

Python はネイティブで Unicode をサポートしています。最初のファイルから 2 番目のファイルに直接読み書きする場合、バイトを逐語的にコピーするため、データは失われません。ただし、文字列をデコードしてから再エンコードする場合は、正しいエンコードを使用していることを確認する必要があります。

于 2011-07-05T19:50:43.607 に答える
2

Python 2.6 以降を使用している場合は、ioライブラリとそのio.openメソッドを使用して、必要なファイルを開くことができます。あなたの場合に設定する必要があるencoding引数があり'utf-8'ます。返されたファイル オブジェクトを読み書きすると、文字列は自動的にエンコード/デコードされます。

とにかく、UTF-8 は ASCII のスーパーセットであるため、ASCII に対して何か特別なことをする必要はありません。

于 2011-07-05T20:00:43.047 に答える
0

ファイルの読み取りと書き込みのみを行い、他のタイプのエンコードされた入力を期待しない限り、特別なことをする必要はありません。

% cat /tmp/u
π is 3.14.

% file /tmp/u
/tmp/u: UTF-8 Unicode text

% cat f.py
f = open('/tmp/u', 'r')
d = f.read()
print d.split()
f.close()

% python f.py 
['\xcf\x80', 'is', '3.14.']

これは、UTF-8 を使用して標準入力を宣言または受け入れると変更されます。

% cat g.py
s = 'π is 3.14.'
print s.split()

% python g.py
  File "g.py", line 1
SyntaxError: Non-ASCII character '\xcf' in file g.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

これを適切に処理するには、PEP 263 (SyntaxError上記の例外で参照) に従って、最初に Python プログラムのエンコーディングを宣言します。

% cat h.py
# -*- coding: utf-8 -*-
s = 'π is 3.14.'
print s.split()

% python h.py
['\xcf\x80', 'is', '3.14.']
于 2011-07-05T20:24:47.677 に答える