windows - C/C++中的跨平台unicode : Which encoding to use?

标签 windows linux unicode cross-platform wchar-t

我目前正在从事一个业余项目 (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++ 接口(interface)允许一个或两个字节编码的字符串 ( click )。 当然,这不适用于 Linux 中的 wchar_t,因为 Linux 中的 wchar_t 默认为 4 个字节。因此,从 sqlite 写入和读取需要针对 Linux 进行转换。

目前,代码因 Windows/Linux 的异常而困惑。我希望坚持在 wchar_t 中存储数据的标准思想:

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

阅读 ( here ) 后,我确信我应该在 Windows 中坚持使用 wchar_t。但在让所有这些工作正常后,问题开始于移植到 Linux。

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

你有跨平台的 unicode 经验吗?对简单地以 UTF-8 格式存储数据而不是使用 wchar_t 的想法有什么想法吗?

最佳答案

在所有平台上使用 UTF-8,在 Windows 上及时转换为 UTF-16 是跨平台 Unicode 的常用策略。

关于windows - C/C++中的跨平台unicode : Which encoding to use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236501/

相关文章:

c# - 如何在 C# 中使用 Windows 服务调用 Windows 应用程序?

python - 如何从目录中获取最新文件?

linux - 如何登录到系统日志?

regex - 字符名称,替换和Umlaut “Ü”:格式错误的UTF-8字符

c# - 在 C# 中组合我自己的 unicode 字符?

linux - Tcl 脚本无法在 Linux 上打开文件(适用于 Windows)

windows - 如何在 Windows 上更新 npm?

c++ - 原子 "check signal and enter system call"操作

regex - 如何使用sed搜索替换文件中的多行

python - request.POST django 中 QueryDict 的奇怪行为