linux - Tcl打开文件然后读取,添加的连线字符在原始文件中不存在

标签 linux unicode character-encoding tcl

我正在这样做:

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

文件 20801.iim 是: enter image description here

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

enter image description here

这发生了吗? TNX。

最佳答案

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

您可以忽略它们,甚至删除它们(它们应该只出现),只要在写出字符串时将 BOM 放回去即可。编写 BOM 只需执行以下操作即可:

puts -nonewline $theChannel "\ufeff"

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

关于linux - Tcl打开文件然后读取,添加的连线字符在原始文件中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30032444/

相关文章:

java - itext 字体 UnsupportedCharsetException

linux - 无法在 2 个 TSI148 VMEbus Controller 之间设置可靠的 DMA 传输

linux - 如何通过 shell linux 使用 grep 精确搜索文件中的字符串?

regex - shell 脚本的空格分隔参数

Python3 和编码 : different on linux and on OSX?

python - 奇怪的 UTF-8 单行解释器错误

c - 如何将分配的内存分解为多个区域并分配给进程?

css - 让 ◼ 在 Windows 7 上运行的 Google Chrome 网络浏览器上正确显示的最简单方法是什么?

python - 将字节解码为 un​​icode 字符串

c - 解析 const char * 返回一个向上看的小三角形。是哪个角色?