我目前正在研究一个业余项目(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。但是在所有这些工作之后,麻烦就开始了移植到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] 删除。
我来说两句