当前位置: 首页 > 知识库问答 >
问题:

带有重音的希腊元音,显示为两个字符而不是一个字符

丌官向荣
2023-03-14

我在处理希腊语的输入,元音可以有重音。

我注意到一些奇怪的输入中包含元音与重音,有时相同的元音与重音似乎是两个独立的字符,而其他时候相同的元音与重音似乎是一个字符,我想不同的字符集编码是有罪的行为。

示例如下所示

έ -----

έ -----

  1. 这种现象的根本原因是什么?
  2. 我怎么可能将所有这两个字符的音调元音转换为单字符的音调元音?(例如将έ转换为Ⅲ),有没有任何“全局方法”来处理这种编码问题?

目前,作为一种解决方案,我所做的是将任何可能的两个字符元音替换为单个字符,如下所示:

text = text.replaceAll("ά", "ά")
        .replaceAll("έ", "έ")
        .replaceAll("ή", "ή")
        .replaceAll("ί", "ί")
        .replaceAll("ύ", "ύ")
        .replaceAll("ό", "ό")
        .replaceAll("ώ", "ώ")
        .replaceAll("Ά", "Ά")
        .replaceAll("Έ", "Έ")
        .replaceAll("Ή", "Ή")
        .replaceAll("Ί", "Ί")
        .replaceAll("Ύ", "Ύ")
        .replaceAll("Ό", "Ό")
        .replaceAll("Ώ", "Ώ");

但应该有更好的方法来实现这一点,我使用Java进行文本处理

共有2个答案

寿意远
2023-03-14

根本原因:有时用Unicode有许多不同的方式来表示相同的字形。通常我们转换为规范形式,但有两种规范/规范化形式(分解:NFD和组合:NFC)。苹果更喜欢第一种(这是Unicode最初的首选方式),大多数其他操作系统更喜欢第二种。每种字体都有自己的偏好(但shaper库会处理它)。

您可以将文本转换为规范组合形式(NFC),但并非所有字形都可以转换为单个字符:某些重音和基本字符的组合需要两个码点(如果您有多个重音,则需要更多码点)。

夏朗
2023-03-14

由于Unicode的复杂性,同一文本有多种编码方式。可以使用锐音符将ε编码为单个字符“带TONOS的希腊小写字母EPSILON”(U 03AD),或编码为“希腊小写字母EPSILON”(U 03B5),后跟“组合锐音符”(U 0301)。不同的人和软件有时会对这些进行不同的编码。

要转换为“更紧凑”的编码,可以使用java。文本归一化器类和归一化形式C(NFC)。

// you can pass the entire string into this:
Normalizer.normalize("ε\u0301", Normalizer.Form.NFC) // produces a string with a \u03AD char

不太紧凑的编码称为NFD。

 类似资料:
  • 我正在创建一个包含希腊字符的XHTML。在下面找到一个简单的例子。 当我打印结果时,我得到了。 有什么能帮忙的吗?

  • 首先,请原谅我英语不好。这不是我的母语(这是我的问题之一,稍后你会看到原因)。 我正在Java中制作一个方法,建议计算字符串的元音。输入来自windows提示符,因为我分别使用javac和java命令编译和执行。 我已经写了一些代码来解决这个问题,但我无法计算带有重音符号的元音。例如。当我尝试“canción”时,它的输出只计算 2 个元音。 我正在使用扫描仪作为输入法。 我尝试比较两个字符串,因

  • 我必须编写一个小程序来删除作为输入的字符串中的重音。我还必须创建一个函数,将每个带重音的字符替换为相应的不带重音的字符,我有一个循环,为main中的每个字符调用该函数: 问题是,如果我在main中提供字符串“é”作为输入,则该字符串被视为大小为2的字符串(参见下面的示例),并且上面的函数被调用两次而不是一次。此外,作为函数输入的char不是正确的。我想我在函数中遇到了相同的大小问题。这个重音不应该

  • 我正在尝试使用iText 7为Java创建一个带有希腊字符的pdf。PDF中只有拉丁字符和数字可见。 我正在使用以下代码加载字体: 我该怎么办?

  • 我是AWS DataPipeline的新手。我创建了一个成功的datapipeline来将所有内容从RDS拉到S3 bucket。一切都管用。我在S3 bucket中看到了我的。csv文件。但我在表中存储西班牙语名称,在csv中,我看到的是“García”而不是“García”

  • JAVA: 编写一个类,其中构造函数接受一个String对象作为其参数。该类应该有一个方法返回字符串中元音的数量,另一个方法返回字符串中辅音的数量。(空格既不计元音也不计辅音,应该忽略。) 在执行以下步骤的程序中演示该类: 要求用户输入字符串 程序显示以下菜单: a、 计算字符串中元音的数量。 b、 数一数字符串中的辅音数 c、 数一数字符串中的元音和辅音 d、 输入另一个字符串 e、 退出程序