【发布时间】:2015-08-17 15:30:03
【问题描述】:
引用 Delphi XE8 帮助:
对于单字节和多字节字符串,Length 返回字符串使用的字节数。 UTF-8 示例:
Writeln(Length(Utf8String('1¢'))); // displays 3对于 Unicode (WideString) 字符串,Length 返回字节数除以 2。
这就引出了重要的问题:
- 为什么在处理上会存在差异?
- 在某些情况下,为什么 Length() 没有按预期执行,只返回参数的长度(如元素的计数)而不是以字节为单位给出大小?
- 为什么它声明它将结果除以 2 用于 Unicode (UTF-16) 字符串? AFAIK UTF-16 最多为 4 字节,因此这会给出不正确的结果。
【问题讨论】:
-
尝试
LenInBytes := Length(UTF8Encode('строка'))或var u8: UTF8String; u8 := 'строка'; I := Length(u8)- 不进行类型转换 -
我写这个是因为它以编码的名字写着,编码一个字符需要多少时间。我只是将它与另一种编码混淆了。
-
我已恢复您的所有编辑。主要是因为我不特别想不断更新我的答案以匹配! ;-) 无论如何,我认为很明显你现在已经掌握了这一点。这个问题很好。我们不能保持原样吗?
标签: delphi delphi-xe8