1

まあ、これは簡単な質問かもしれません。率直に言って、私はそれらすべてのエンコーディングと少し混乱しています。

01234.txtiso-8859-1というファイルがあるとします。

私がする時:

iconv --from-code=iso-8859-1 --to-code=utf-8 01234.txt > 01234_utf8.txt

それは私に望ましい結果を与えます、しかし私がpythonとサブプロセスを使って同じことをするとき:

import subprocess

p0 = subprocess.Popen([<here the same command>], shell=True)
p0.wait()

ほぼ同じ結果が得られますが、新しいファイルが欠落しています。たとえば、最後のファイルと最後のファイルの前の行の一部です。

ここに両方の​​ファイルの最後の3行があります:iconv result:

795719000 | MARIA TERESA MARROU VILLALOBOS | 107
259871385 | CHRISTIAM ALBERTO SUAREZ VILLALOBOS | 107
311015100 | JORGE MEZA CERVANTES | 09499386

Pythonの結果:

795719000 | MARIA TERESA MARROU VILLALOBOS | 107
259871385 | CHRISTIAM

編集:私が使用しようとしたPythonファイルcoding: utf-8coding: iso-8859-1同時に両方ではありません)。

編集:私はbpythonでコーデックを使用しましたが、それはうまく機能します。ファイルから使用すると、望ましくない結果が得られます。

編集:私はLinux(Ubuntu 9.10)とPython2.6.2を使用しています。

助言がありますか?

4

1 に答える 1

1

あなたは次のように書いています:「Pythonファイルで、コーディングを使用しました:utf-8およびコーディング:iso-8859-1。

それらの最初のものだけが使用されます。第 2 に、それが表示される Python ソース ファイルのエンコーディングを指定し、Python コンパイラがそのジョブを実行できるようにします。したがって、入力ファイルと出力ファイルのエンコーディングとはまったく関係ありません。エンコード X からエンコード Y にデータをトランスコードするスクリプトは、ASCII 文字のみを使用して記述できます。

今あなたの問題に:

あなたの書き込み: " p0 = subprocess.Popen([<here the same command>], shell=True)"

(常に)質問するときは、実行したと思っていた/考えていたものではなく、実行された正確なコードを示してください。コピー/貼り付けを使用し、再入力しないでください。コメントに入れないでください。質問を編集します。

更新:症状に基づく推測は次のとおりです: ファイルの最後の数バイトが失われています -- 消える前にバッファをフラッシュできなかったようです。切り捨てられた出力ファイルのサイズは 2 の整数乗ですか?

> 01234_utf8.txtおそらく、コマンド行プロセッサーが確実に実行することに頼るべきではありません。コマンドのその部分を省略した場合、ペイロード全体が stdout に表示されますか? その場合は、出力ファイルを自分で開き、そのハンドルを stdout 引数として渡し、後で handle.flush() と handle.close() を実行することで、問題を回避できる場合があります。

于 2010-02-12T23:41:51.167 に答える