Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Character encoding 安全地将字典保存到文件_Character Encoding_Tcl - Fatal编程技术网

Character encoding 安全地将字典保存到文件

Character encoding 安全地将字典保存到文件,character-encoding,tcl,Character Encoding,Tcl,将字典保存到文件中,以便稍后在Tcl中加载到其他计算机/系统上的最佳方法是什么 我不认为fconfigure$stream-translation二进制文件;puts-nonewline$stream$dict在存在unicode字符为>\u00ff的键/值时起作用。“utf-8”编码可以吗(为了节省磁盘空间),还是应该始终使用完整的“unicode” 字典对我来说是新的,但由于它们的文本表示是带有交替键/值的列表,而列表只是带有一些额外语法字符的字符串,所以问题可能是“安全地将字符串保存到文件

将字典保存到文件中,以便稍后在Tcl中加载到其他计算机/系统上的最佳方法是什么

我不认为
fconfigure$stream-translation二进制文件;puts-nonewline$stream$dict
在存在unicode字符为>\u00ff的键/值时起作用。“utf-8”编码可以吗(为了节省磁盘空间),还是应该始终使用完整的“unicode”


字典对我来说是新的,但由于它们的文本表示是带有交替键/值的列表,而列表只是带有一些额外语法字符的字符串,所以问题可能是“安全地将字符串保存到文件”?

您的问题可以简化:

我应该使用什么编码

答案是:视情况而定

  • 如果你只有二进制数据,那么二进制就是最好的选择
  • 如果您主要使用ascii字符和少数例外(如umlauts等),那么utf-8是最适合您的编码(在
    \x00
    \x7f
    之外的字符用2个或更多字节编码,ascii用1个字节编码)
  • 如果有很多,那么使用unicode或其他编码可能会更好(每个字符2字节vs 3字节)

正确:列表和dict的(反)序列化在Tcl中比在许多其他语言中容易得多:将其另存为字符串。

此外,如果您使用的不是系统编码,那么您需要在许多地方特别小心处理它(即,在任何将其读回内存的地方)。如果数据将由非Tcl代码处理,请真正坚持系统编码以降低“WTF!?”因子。