Unicode 正确处理UTF8字符串连接

Unicode 正确处理UTF8字符串连接,unicode,Unicode,我刚知道 这引发了另一个问题,与以此类字符开头的字符串的串联有关 我正在开发一个UTF8String对象,以使UTF-8字符串处理更容易 此对象有一个concat()方法,该方法将另一个字符串连接到当前字符串 如果第二个字符串以组合字符开头,我是否应该在两个字符串之间添加一个不间断的空格,以避免将第二个字符串先前隔离的第一个字符组合到第一个字符串的最后一个字符 或者,是否会出现这种组合 我正在开发一个UTF8String对象,以使UTF-8字符串处理更容易。[…]我应该在两个字符串之间添加一个不

我刚知道

这引发了另一个问题,与以此类字符开头的字符串的串联有关

我正在开发一个
UTF8String
对象,以使UTF-8字符串处理更容易

此对象有一个
concat()
方法,该方法将另一个字符串连接到当前字符串

如果第二个字符串以组合字符开头,我是否应该在两个字符串之间添加一个不间断的空格,以避免将第二个字符串先前隔离的第一个字符组合到第一个字符串的最后一个字符

或者,是否会出现这种组合

我正在开发一个UTF8String对象,以使UTF-8字符串处理更容易。[…]我应该在两个字符串之间添加一个不间断的空格吗

我会说绝对不会。处理UTF-8之类的字节编码是一个独立的、较低级别的问题,而不是处理字形边界。将这两个问题混为一谈将是一种意外的、不受欢迎的分层违规行为

如果您想构建一个字符串类,将grapheme集群视为其不可分割的单元,这很好,但这是另一种动物(需要做大量的工作)

我正在开发一个UTF8String对象,以使UTF-8字符串处理更容易。[…]我应该在两个字符串之间添加一个不间断的空格吗

我会说绝对不会。处理UTF-8之类的字节编码是一个独立的、较低级别的问题,而不是处理字形边界。将这两个问题混为一谈将是一种意外的、不受欢迎的分层违规行为


如果您想构建一个字符串类,将字形集群视为其不可分割的单元,这很好,但这是另一种动物(需要做大量的一致性工作)。

首先如何在字符串中获得分解文本?代码中可能有一个
strLetter+strDiacritic
表达式,在这种情况下,添加NBSP是不正确的。应该可以通过组合单独的基本字符和组合字符来构建Unicode字符串。如果一个string类不允许我这么做,我会非常惊讶。猜测库用户的意图是一个相当糟糕的主意。随机添加空格在98%的情况下都是错误的。不添加它们可能有2%的时间是错误的,但这是图书馆用户可以自己轻松修复的。一定要避免重新发明这个轮子,至少要看看ICU是如何做到的。“合并而不添加任何内容”和“合并但添加”有时可能是正确的,但两者都不一定总是正确的。或者,换句话说,它取决于……它取决于上下文。另一个选择可能是从第二个字符串中去掉前导组合字符。有趣的想法,谢谢分享。我特别考虑用户通过web表单提交的UTF-8字符串;它们可能包含任何内容,包括以组合字符开头的字符串。但是,我想,这更像是一个验证问题,应该在连接之前解决。首先,如何在字符串中获得分解的文本?代码中可能有一个
strLetter+strDiacritic
表达式,在这种情况下,添加NBSP是不正确的。应该可以通过组合单独的基本字符和组合字符来构建Unicode字符串。如果一个string类不允许我这么做,我会非常惊讶。猜测库用户的意图是一个相当糟糕的主意。随机添加空格在98%的情况下都是错误的。不添加它们可能有2%的时间是错误的,但这是图书馆用户可以自己轻松修复的。一定要避免重新发明这个轮子,至少要看看ICU是如何做到的。“合并而不添加任何内容”和“合并但添加”有时可能是正确的,但两者都不一定总是正确的。或者,换句话说,它取决于……它取决于上下文。另一个选择可能是从第二个字符串中去掉前导组合字符。有趣的想法,谢谢分享。我特别考虑用户通过web表单提交的UTF-8字符串;它们可能包含任何内容,包括以组合字符开头的字符串。但我想,这更像是一个验证问题,应该在连接之前解决。