【问题标题】:TCL Format Command Returns Wrong UTF-8 CharactersTCL 格式命令返回错误的 UTF-8 字符
【发布时间】: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


【解决方案1】:

§ 应该来自format %c 167;鉴于它是section sign character,这完全符合预期。相比之下,format %c 21 应该生成non-printable NAK character,尽管由于某种原因您的终端呈现不同的方式。 (我不确定它回退到什么解释;它不是我手头方便的编码表中列出的一种。)

Tcl 的做法可能完全正确,尤其是 NAK 字符出现在最常见的字符编码中。

【讨论】:

  • 非常感谢您的友好回复。控制台打印输出问题仍然存在,但 TCL 实际上正在发送正确的值。由于我不需要控制台打印输出,我可以说问题解决了!
猜你喜欢
  • 2016-11-13
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多