这取决于编码。最简单的一种是 UTF-8,您可以在其中简单地将字符串存储在char*
数组中。令人惊讶的是,构建频率列表将使用与 ASCII 文本几乎相同的代码来完成。这是一种 UTF-8 魔法,但这就是为什么这种编码如此强大的原因!
在这种情况下,您应该记住以下几点:
Unicode 提供比 ASCII 更多的白色字符。您需要一份它们的列表才能知道单词的分隔位置。令人高兴的是,维基百科有一个.
Unicode 并不总是明确的。在某些情况下,不同的序列会产生相同的字符。它通常发生在组合字符中:例如德语Ä
可以表示为:
- 字符
U+00C4
- 单个字母Ä
- 序列
U+0041 U+0308
- 拉丁字母A
和分音符(变音符号)。
令人高兴的是,在德语中只有七个非英文字符:ÄäÖöÜüß
. 您需要检查它们的替代变体的外观(例如,在第 4 页和第 5 页,您应该找到所有德语字符及其替代形式)。
当然,要解决这两个问题,您还需要知道您的所有发现如何在 UTF-8 中表示。这在RFC 3629第 3 页中进行了描述。
如果是其他编码(或其他语言),我建议不要自己处理,而是使用一些已经存在的库。如果您使用的是 Linux(或大多数其他 Unices),您可以使用iconv
函数 ( man 3 iconv
) 将您的文本转换为 UTF-8,然后按照我之前的描述进行操作。
其他选择是使用一些已经处理各种 Unicode 变体的库。最强大的可能是ICU - International Components For Unicode,查看他们的手册以了解如何使用它来执行您的任务。