【发布时间】:2017-11-21 00:19:03
【问题描述】:
我只在 TCL 中实现了一个套接字客户端。服务器需要知道客户端发送的消息长度,所以我在消息长度前加上消息长度的 utf-8 字符。我使用 TCL Format 命令将消息长度转换为 utf-8 字符。
但是,Format 命令并不总是返回正确的 utf-8 字符,这会使服务器感到困惑。 例如,在下面的示例代码中,格式为 21 和 167 返回 §:
% format %c 21
§
% format %c 167
§
难道是我做错了什么?
【问题讨论】:
-
恕我直言,这是个坏主意。我建议您将长度作为基本数字发送。
-
@Peter 谢谢,那是我最初所做的,但服务器(QT)将消息作为字符数组接收。所以数字被转换成它们对应的 utf-8 代码。
-
您是否尝试过格式化为二进制文件? IE。如果您的字符串在变量
str中并且您发送值[binary format c [string length $str]]$str?您基本上限制为 255 个字符,但您不会遇到转换问题。 (不熟悉 QT。) -
关于格式的问题:我无法重现它,它不应该发生:格式只是返回给定 Unicode 数字的字符,它不会以任何方式重新编码。跨度>
-
@PeterLewerin,我的观察是不可打印字符出现问题。我的电脑运行windows 7,tcl版本是8.6。我已经用 [binary format c [string length $str]]$str 尝试了你的建议,但同样的问题。
标签: tcl