0

我无法将文件读取为 ansi 编码。

fconfigure $fd -encoding CP1250

我想将 ansi 中的 utf-8 文件转换为将通道传递给 xml 解析器(tdom)。你能帮助我吗? 编辑:我想通过 tdom 解析 xml 文件,它是 utf-8 文件编码。然后,当我直接(没有 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

P.S. Next time please explain what the real problem is. For some bizzare reason people tend to think that the actual error message is not relevant while it's the most crucial bit of information in fact.

于 2012-11-19T12:00:04.790 回答