我不知道是否有在Tcl的一种简单的方法来读取一个双字节文件(或因此我认为它被称为)。我的问题是,当我在打开记事本(我在Win7上)时看到的文件看起来很好,但是当我在Tcl中读取它们时,每个字符之间都有空格(或者更确切地说,是空字符)。阅读双字节文件
我目前的解决方法已经先运行一个string map
删除所有的空
string map {\0 {}} $file
,然后正常处理信息,但有一个简单的方法来做到这一点,通过fconfigure
,encoding
或另一种方式?
我不熟悉的编码,所以我不知道我应该使用什么参数。
fconfigure $input -encoding double
当然失败,因为double
不是一个有效的编码。与“doublebyte”相同。
实际上,我工作的大文本文件(超过2 GB),做我的“处理方法”由线的基础上一条线,所以我认为,这减缓了下跌过程。
编辑:正如@mhawke所指出的,该文件是UTF-16-LE编码的,这显然不是受支持的编码。有没有一种优雅的方式来规避这个缺点,也许通过proc
?或者这会使事情比使用string map
更复杂?
这样做也给了我很多的'?',而那些不存在于原始文件。例如,我在文件“26-MAR-2014 22:03:47”中有一个日期时间值,这就变成了“26-MAR-2”。 3:47'。也许这可能有助于确定编码? – Jerry 2014-11-24 09:21:57
我也在十六进制编辑器中打开了文件,前两个字节是'FF FE',如果有帮助的话。 – Jerry 2014-11-24 09:26:05
0xFF 0XFE是一个[Byte Order Mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16),表示该文件被编码为UTF-16,并具有小尾序。所以这个文件应该被认为是UTF-16-LE。但似乎在Tcl中“unicode”没有明确规定(取决于本地平台),并且没有utf-16-le或utf-16-be编码选项。 – mhawke 2014-11-24 10:50:27