0

ファイルを ansi エンコーディングとして読み取ることができません。

fconfigure $fd -encoding CP1250

ansi の utf-8 ファイルを変換して、チャネルを xml パーサー (tdom) に渡したい。手伝って頂けますか? EDIT: utf-8ファイルエンコーディングのtdomを介してxmlファイルを解析したかったのです。次に、直接(fconfigureまたはエンコードtclコマンドを使用せずに)そのファイルを開いて読み取り、tdomに渡すと、tdomはファイルデータの完全な戻りのエラーを返します。CP1250 そのファイルを ANSI として読み取りたいので使用しています (ansi エンコーディングでは tdom でエラーが発生しないため)。

ありがとうございます。

4

1 に答える 1

4

「ファイルをansiエンコーディングとして読み取ることができません」を定義します—fconfigureコードスニペットのように呼び出すときにエラーが発生しますか?または何?

必要なエンコーディングを利用できますか?はいと思わencoding namesれますが、インタプリタで実行して確認してください。

発生する可能性のある他の問題(よくわかりません)は、fconfigure $fd -encoding CP1250Tclを実行すると、読み取られたデータ$fdが「CP1250」Windowsコードページでエンコードされていると解釈し、Tclの内部エンコードに変換することです。 UTF-8。したがってtdom、UTF-8でエンコードされたバイトのストリームが本当に必要な場合は、ファイルから読み取ったものを明示的にUTF-8に変換する必要があります。あなたはこれを行うことができます:

set fd [open $filename]
fconfigure $fd -encoding cp1250
set data [encoding convertto utf-8 [read $fd]]
tdom whatever $data

あなたが試みることができるもう一つのアプローチは、ファイルをバイナリとして読み取ることです(その内容の解釈なしで、そしてあなたが望む方法でそれを再エンコードします):

set fd [open $filename]
fconfigure $fd -translation binary
set data [encoding convertto utf-8 [encoding convertfrom cp1250 [read $fd]]]
tdom whatever $data

PS次回は本当の問題は何か説明してください。いくつかの奇妙な理由で、人々は実際のエラーメッセージは関連性がないと考える傾向がありますが、それは実際には最も重要な情報です。

于 2012-11-19T12:00:04.790 に答える