【发布时间】:2014-10-29 11:39:19
【问题描述】:
我正在尝试创建一种有效的算法来缩短 QString,因此当转换为 UTF-8 时,它会比定义的长度短,并且仍然是有效的 UTF-8。
- 输入
- QString 文本 - 包含所有可能字符的字符串 - 未指定最大长度
- int 限制 - 以 utf-8 编码的输出的最大长度
- 输出
- QByteArray 输出 - utf-8 格式的原始文本比限制短。
- 示例 1:
- text = "你好吗?"
- 限制 = 5
- 输出 = “怎么样”
- 示例 2:
- text = "Как дела?"
- 限制 = 5
- 输出 = "Ка"
- d0 9a d0 b0 - 包括“к”已经超过限制,包括 d0 会导致无效的 utf-8 字符串。
首先我们从下面的代码开始,但这可能会在中间切掉 UTF-8 字符,这是不可接受的:
QByteArray output = text.toUtf8().left(limit);
我们开发了正确的算法,该算法有效,但非常丑陋且效率不高:
QString tmp = input;
while (tmp.toUtf8().size() > limit)
tmp.chop(1);
QByteArray output = tmp.toUtf8();
- 有没有更好的方法,怎么做?
- 如果是,请分享代码?
- 如果不是,为什么?
【问题讨论】: