【问题标题】:Proper handling of UTF8 string concatenation正确处理 UTF8 字符串连接
【发布时间】:2016-07-01 15:38:38
【问题描述】:

我刚刚得知it's OK for a Unicode string to contain isolated combining characters

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

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

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

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

或者预计会发生这种组合?

【问题讨论】:

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

标签: unicode


【解决方案1】:

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

我会说绝对不会。处理像 UTF-8 这样的字节编码是一个单独的、比处理字素边界更低级别的问题。将这两个问题混合在一起会是一种意想不到的、不受欢迎的分层违规行为。

如果您想构建一个将字素簇视为其不可分割单元的字符串类,那很好,但那是另一种动物(并且要始终如一地做很多工作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多