我正在使用 RandomAccessFile,并希望为用户保留文件的固定长度部分以将注释作为字符串输入。我对 utf-8 的理解是,不同的字符可以占用不同的长度,最大占用 3 个字节。
所以我认为我最好的用户友好选项是告诉用户他们最多可以输入 100 个字符,然后我在文件中为字符串保留 100*3 字节的空间。如果他们使用不需要太多空间来编码的字符,那么只会浪费一些空间。
这是这种情况的典型策略还是有更好的方法来做到这一点?
谢谢
我正在使用 RandomAccessFile,并希望为用户保留文件的固定长度部分以将注释作为字符串输入。我对 utf-8 的理解是,不同的字符可以占用不同的长度,最大占用 3 个字节。
所以我认为我最好的用户友好选项是告诉用户他们最多可以输入 100 个字符,然后我在文件中为字符串保留 100*3 字节的空间。如果他们使用不需要太多空间来编码的字符,那么只会浪费一些空间。
这是这种情况的典型策略还是有更好的方法来做到这一点?
谢谢
我对 utf-8 的理解是,不同的字符可以占用不同的长度,最大占用 3 个字节。
嗯,不完全是。在基本多语言平面中就是这种情况(即最多为 U+FFFF),但对于最多为 U+1FFFFF 的字符, UTF-8 最多可以占用四个字节。(我不相信当前使用的任何东西。)此时,您的 JavaString
对象也将使用多个char
每个字符。
不过,您可以相当容易地判断特定字符串实际使用的长度 - 最简单的选择就是对其进行编码并查看您获得了多少字节。我怀疑在大多数情况下允许更多文本对用户更友好,但对于可以使用多少个字符并不“公平”(即某些字符比其他字符占用更多空间)。这实际上取决于您的用户是否会注意到,以及他们是否想要使用超过 100 个字符......
UTF-8 实际上最多可以占用 4 个字节。但是,是的,如果您真的想允许您的用户输入任何可能的 Unicode 字符,那么这种方法是可靠的。
在当前的 Unicode 集中,一个代码点可以占用 UTF-8 中的一到四个八位字节。但是一个可见的字素可以包含多个代码点(更多信息请参见组合字符序列与“字符”相同吗?)。因此,在所有情况下,使编程计数与可见计数匹配本质上是困难的。
这听起来像是一个国际化问题。考虑到 100 个字符对于英语中的某些内容可能是可以的,但传统的 I18N 冒烟测试会增加字符串长度,因为许多语言更冗长。
该方法是否合理取决于您希望支持的语言/书写系统集以及字符串字段的用途。