TCL Format命令返回错误的UTF-8字符

TCL Format命令返回错误的UTF-8字符,tcl,Tcl,我只在TCL中实现一个套接字客户端。服务器需要被告知客户端发送的消息的长度,因此我用消息长度的utf-8字符作为消息长度的前缀。我使用TCL Format命令将消息长度转换为utf-8字符 但是,Format命令并不总是返回正确的utf-8字符,这会混淆服务器。 例如,在下面的示例代码中,格式返回§21和167: % format %c 21 § % format %c 167 § 可能是我做错了什么吗?该§应来自格式%c 167;这正是我们所期望的,因为这是最重要的。相比之下,格式%c 21

我只在TCL中实现一个套接字客户端。服务器需要被告知客户端发送的消息的长度,因此我用消息长度的utf-8字符作为消息长度的前缀。我使用TCL Format命令将消息长度转换为utf-8字符

但是,Format命令并不总是返回正确的utf-8字符,这会混淆服务器。 例如,在下面的示例代码中,格式返回§21和167:

% format %c 21
§
% format %c 167
§
可能是我做错了什么吗?

该§应来自格式%c 167;这正是我们所期望的,因为这是最重要的。相比之下,格式%c 21应该生成一个,尽管由于某些原因,您的终端呈现方式有所不同。我不确定它会回到什么样的解释上来;我手头上的编码表中并没有列出它


Tcl可能做了完全正确的事情,特别是NAK字符出现在最常见的字符编码中。

IMHO这是个坏主意。我建议您改为将长度作为基本数字发送。@Peter谢谢,这是我最初发送的,但服务器QT以字符数组形式接收消息。因此,这些数字被转换成相应的utf-8代码。您是否尝试过将其格式化为二进制?也就是说,如果您的字符串在变量str中,并且您发送了值[二进制格式c[字符串长度$str]]$str?基本上限制为255个字符,但不会出现转换问题。不熟悉QT。你对格式有什么问题:我无法复制它,也不应该发生这种情况:格式只是返回给定Unicode数字的字符,它不会以任何方式重新编码。@PeterLewerin,我的观察是,不可打印的字符会出现问题。我的电脑运行Windows7,tcl版本是8.6。我已经尝试过你的建议,使用[binary format c[string length$str]]$str,但问题相同。我非常感谢你的友好回复。控制台打印输出问题仍然存在,但TCL实际上发送了正确的值。因为我不需要控制台打印输出,我可以说问题解决了!