【问题标题】:Normalize a Unicode string to get its canonical representation规范化 Unicode 字符串以获取其规范表示
【发布时间】:2012-02-07 09:32:13
【问题描述】:

鉴于例如 "à"(一个 Unicode 字符)也可以编码为 "\u0300a"(两个 Unicode 字符,即组合重音 (U+0300) 后跟一个 a),.NET 中是否有功能规范化一个字符串,以便后者转换为前者?

我相信前者被视为规范表示。我的特殊问题是,我见过某些浏览器无法正确显示后者的情况,但这在其他情况下也很有用。

【问题讨论】:

    标签: .net unicode normalization diacritics unicode-normalization


    【解决方案1】:

    刚找到,呵呵! String.Normalize

    【讨论】:

    • 很好。但以防万一,“à”的分解形式不是 U+0300 后跟字母“a”,而是这些字符的顺序相反。在 Unicode 中,组合变音符号遵循与它们相关的字符。这与我们通常在欧洲键盘上键入字符的方式不同(首先按死键作为变音符号,然后按字母键——这通常会产生一个预先组合的字符,即不涉及组合变音符号)。你的观察是正确的,预先组合的字符通常在输出上效果更好。
    • 感谢您的更正,我很确定情况正好相反!没错,使用“死键”的键盘输入可能让我混淆了顺序。
    • 另外,两者都不是普遍认为的规范;两者都是同样正确的 Unicode 字符串。不过,一些特定的用例可能会认为特定的形式是规范的。既然你提到了浏览器,这表明你关心网络,而W3C字符模型确实坚持NFC,所以你没有错,只是过于具体:)
    猜你喜欢
    • 2011-12-10
    • 2018-04-16
    • 2011-06-20
    • 2010-10-10
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多