【问题标题】:Converting combining diacritics to simple utf将组合变音符号转换为简单的 utf
【发布时间】:2014-01-02 18:24:36
【问题描述】:

由于某些编码问题,我在向数据库插入字符串时遇到问题。

字符串源是外部 rss 提要。 在网络浏览器中看起来没问题。即使在调试器中,文本似乎也可以。 如果我把strong复制到notepad,结果也ok。

但在 notepad++ 中可以看到该字符串正在使用组合字符。 如果更改为 ansii,则会出现两者组合。 例如

á 显示为 a´

(在记事本++中就像有两个字符,在另一个上。我什至可以选择......一半的字符)

我用谷歌搜索了很多,并尝试了非常不同的方法来解决这个问题。 我真的很想找到一种巧妙的方法来将字符串转换为简单的 utf8 数据库兼容的变音符号。

有什么帮助吗? 非常感谢!

【问题讨论】:

  • 你能把实际的字符串粘贴到这里吗?
  • 当然... "Diálogos sobre cinema português e o cinema do mundo na Gulbenkian" Notepad++ 中只能选择一半字符。
  • 这种行为的原因是NotePad++没有在你的电脑中使用正确的编码(不知道为什么,你必须看看它的配置)。根据这篇文章中投票最多的答案 (stackoverflow.com/questions/398621/…),您应该使用 1252 编码。我做了一个测试并且确实有效(使用我的默认编码的奇怪符号和使用这个时的á)。这就是 NotePad++ 奇怪行为的原因,但不确定您要完成什么,您能否解释得更好?
  • 我发现问题是提要中的一些字符串使用了组合变音符号。字符 á 是 ́但是我们也可以使用 á 来组合 ´+a (这是一个组合')在字母a之后。我需要找到一种将这种组合变音符号转换为简单实体的方法。
  • 这个有什么好看的吗?我也有类似的问题。

标签: c# encoding diacritics


【解决方案1】:

这应该适合你

output.Normalize(NormalizationForm.FormC)

这个小测试给出了 3, 2, 3。中间的字符串正确地组合了 A,它的变音符号变成了一个 UTF-8 字符

Console.WriteLine(Encoding.UTF8.GetByteCount(("A\u0302")));    
Console.WriteLine(Encoding.UTF8.GetByteCount(("A\u0302").Normalize(NormalizationForm.FormC)));
Console.WriteLine(Encoding.UTF8.GetByteCount(("T\u0302").Normalize(NormalizationForm.FormC)));

【讨论】:

    【解决方案2】:

    我的 Mac 可以在终端中运行以下命令来解决这个问题:

    iconv -f utf-8-mac -t utf-8 输入文件>输出文件

    【讨论】:

    • 我相信他正在寻找一种务实的方法来做到这一点
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 2016-10-14
    • 2016-06-27
    • 2019-09-27
    • 2012-01-11
    • 2011-04-18
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多