gpt4 book ai didi

c++ - 如何在 C++ 多平台中将 (char *) 从 ISO-8859-1 转换为 UTF-8?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:42 27 4
gpt4 key购买 nike

我正在更改 C++ 中的软件,以 ISO Latin 1 格式处理文本,以将数据存储在 SQLite 的数据库中。
问题是 SQLite 在 UTF-8 中工作...而使用相同数据库的 Java 模块在 UTF-8 中工作。

我想有一种方法可以在将 ISO Latin 1 字符存储到数据库之前将其转换为 UTF-8 字符。我需要它在 Windows 和 Mac 中工作。

我听说 ICU 会这样做,但我认为它太臃肿了。对于这 2 个字符集,我只需要一个简单的转换系统(最好是来回转换)。

我该怎么做?

最佳答案

ISO-8859-1 被合并为 ISO/IEC 10646 和 Unicode 的前 256 个代码点。所以转换非常简单。

对于每个字符:

uint8_t ch = code_point; /* assume that code points above 0xff are impossible since latin-1 is 8-bit */

if(ch < 0x80) {
append(ch);
} else {
append(0xc0 | (ch & 0xc0) >> 6); /* first byte, simplified since our range is only 8-bits */
append(0x80 | (ch & 0x3f));
}

参见 http://en.wikipedia.org/wiki/UTF-8#Description了解更多详情。

编辑:根据 ninjalj 的评论, latin-1 直接转换为前 256 个 unicode 代码点,因此上述算法应该有效。

关于c++ - 如何在 C++ 多平台中将 (char *) 从 ISO-8859-1 转换为 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586214/

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