gpt4 book ai didi

c++ - 如何在 C++ 中比较/替换数组中的非 ASCII 字符?

转载 作者:太空宇宙 更新时间:2023-11-04 14:31:51 25 4
gpt4 key购买 nike

我有一个很大的字符数组,其中包含以 UTF-8 编码的捷克变音字符(例如“á”)。我需要将它们替换为它们的 ASCII 等价物(例如“a”),因为程序必须在 Windows 上运行(Linux 控制台完全接受这些字符)。我正在逐个读取数组 char 并将内容写入字符串。这是我正在使用的代码,这不起作用:

int array_size = 50000; //size of file array
char * array = new char[array_size]; //array to store file contents
string ascicontent="";

if ('\u00E1'==array[zacatek]) { //check if char is "á"
ascicontent +='a'; //write ordinal "a" into string
}

我什至尝试用 'á' 替换 '\u00E1',但它也不起作用。猜测这些字符比 ascii 长是有问题的。

如何声明非 ascii 字符,以便进行比较?

最佳答案

每个 char 都是一个字节,但是 UTF-8 可以使用多个字节来编码单个字符。特别是 U+00E1 被编码为两个字节:0xC3 0xA1。所以你不能只比较一个 char 来做你想做的事。

有多种方法可以解决您的问题:

A) 首先,尝试在谷歌上搜索“windows console utf-8”,看看它是否提供了任何可以使事情正常工作而根本不必改变字符的东西。 (我不知道有没有什么适合你的,我从来没有试过这个。)

B) 使用 MultiByteToWideChar 将数据转换为宽字符 (wchar_t)或 mbstowcs然后用谷歌搜索如何使用 wcout 或类似的方法将 UTF-16 输出到控制台。

C) 使用MultiByteToWideChar将数据从 UTF-8 转换为 UTF-16。然后使用 WideCharToMultiByte从 UTF-16 转换为控制台的代码页,依赖于它可以自动“最适合”常见字符(例如“á”到“a”)这一事实。

D) 如果您真的只关心一组有限的字符(例如只关心捷克语代码页中的重音字符),那么您可以编写自己的 UTF-8 字节序列查找表和所需的替换字符。您只需要通过这些多个字节而不是单个字符对 UTF-8 进行比较。在各种工具中,我找到了 this page有助于了解字符是如何以各种方式编码的。

其中哪些对您的程序最有意义取决于各种因素,例如防止特定于 Windows 的部分与特定于 Linux 或跨平台的部分发生冲突的难易程度。

关于c++ - 如何在 C++ 中比较/替换数组中的非 ASCII 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com