C / C ++中的跨平台unicode:要使用哪种编码?

ErikKou:

我目前正在研究一个业余项目(C / C ++),该项目应该在Windows和Linux上都能工作,并且完全支持Unicode。可悲的是,Windows和Linux使用不同的编码,这使我们的生活更加困难。

在我的代码中,我尝试使用尽可能通用的数据,以使Windows和Linux都容易使用。在Windows中,默认情况下wchar_t编码为UTF-16,而在Linux中则编码为UCS-4(如果我输入错了,请更正我)。

我的软件打开({_wfopen,UTF-16,Windows},{fopen,UTF-8,Linux}),并将数据写入UTF-8中的文件。到目前为止,这一切都是可行的。直到我决定使用SQLite。

SQLite的C / C ++接口允许一个或两个字节的编码字符串(单击)。当然,这不适用于Linux中的wchar_t,因为Linux中的wchar_t默认为4字节。因此,从sqlite写入和读取需要Linux转换。

当前,除了Windows / Linux的例外,代码杂乱无章。我希望坚持将数据存储在wchar_t中的标准思想:

  • Windows中的wchar_t:文件路径没有问题,对sqlite的读/写没有问题。无论如何,应将数据写入文件。
  • Linux中的wchar_t:由于UTF-8编码,在读/写到sqlite(wchar_t)之前进行转换而导致的文件路径异常,以及在将数据写入文件时对于Windows相同。

看完(这里)后,我确信我应该在Windows中坚持使用wchar_t。但是在所有这些工作之后,麻烦就开始了移植到Linux。

目前,我正在考虑将其全部重做以保留简单的char(UTF-8),因为它适用于Windows和Linux,并牢记一个事实,我需要在Windows中的每个字符串“ WideCharToMultiByte”以实现UTF-8。使用简单的基于char *的字符串将大大减少Linux / Windows的异常数量。

您有使用unicode跨平台的经验吗?关于仅将数据存储在UTF-8中而不使用wchar_t的想法有什么想法?

幼犬

所有平台上的UTF-8都可以及时转换为Windows的UTF-16,这是跨平台Unicode的常见策略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章