gab*_*iel 5 c c++ utf-8 iso-8859-1 character-encoding
我正在用C++改变软件,用ISO Latin 1格式处理文本,以便在SQLite中的数据库中存储数据.
问题是SQLite在UTF-8中工作......并且使用相同数据库的Java模块在UTF-8中工作.
我希望有一种方法可以在存储到数据库之前将ISO Latin 1字符转换为UTF-8字符.我需要它在Windows和Mac上工作.
我听说ICU会这样做,但我觉得它太臃肿了.对于这两个字符集,我只需要一个简单的转换系统(最好来回).
我该怎么办?
Eva*_*ran 16
ISO-8859-1被纳入ISO/IEC 10646和Unicode的前256个代码点.所以转换非常简单.
对于每个char:
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));
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见http://en.wikipedia.org/wiki/UTF-8#Description.
编辑:根据ninjalj的评论,latin-1将direclty转换为前256个unicode代码点,因此上述算法应该可行.
| 归档时间: |
|
| 查看次数: |
9759 次 |
| 最近记录: |