【问题标题】: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。
【问题讨论】:
标签:
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(出于某种原因)。