【问题标题】:Tcl open file then read, added wired chars not exist in original fileTcl 打开文件然后读取,添加的有线字符在原始文件中不存在
【发布时间】:2015-05-04 14:17:51
【问题描述】:

我正在这样做:

set fileIdSource [open 20801.iim "r"]
set file_data [read $fileIdSource]
puts "=========\n$file_data\n========="
close $fileIdSource

文件 20801.iim 是:

然后我在 tcl 中运行它,我在 "VERSION" 之前得到 2 个有线字符:

是吗? TNX。

【问题讨论】:

  • 在我看来像 BOM(字节顺序标记)。

标签: linux unicode character-encoding tcl


【解决方案1】:

这两个字符(可能)是Byte Order Mark (BOM)。写入文件的编码可能是 UTF-8,并对其进行了某种程度的编码,并且被稍微误解了。 Tcl 不处理 BOM(Tcl 脚本除外),因为在某些情况下程序员确实必须关心。它们应该是写在文件开头的单个字符(它被写为多字节序列)并且应该被 Tcl 作为单个字符读取,但出于某种原因不会发生在这里。 (你的测试平台上encoding system返回的值是多少?)

只要在写出字符串时将 BOM 放回原处,您就可以忽略它们,甚至去掉它们(它们应该只会出现)。编写 BOM 只是一件简单的事情:

puts -nonewline $theChannel "\ufeff"

在向该文件写入任何其他内容之前(前提是您使用的是基于 Unicode 的编码之一)。但通常完全没有必要这样做,除非您正在编写完整的多字节编码在 Windows 上编写 UTF-8(出于某种原因)。

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多