c++ - 在 Unicode 应用程序中使用 ANSI 函数是否有任何限制

标签 c++ winapi unicode sqlite

我有一个严格使用 Unicode 函数和数据类型的 C++ native WinAPI 应用程序。即,CreateWindowW()、SendMessageW()、wstring、WCHAR 等。现在我打算扩展我的应用程序以使用 SQLite3。

我的问题:SQLite3 库是 ANSI。这意味着我必须使用 char* 作为大多数函数参数。

在 Unicode 应用程序中使用 ANSI 函数是否有任何限制或负面影响?

如果有这些影响可能是什么?

最佳答案

SQLite 不限于 ANSI。认为 char* 暗示 ANSI 编码文本是一种误解。并非所有对 char* 数据进行操作的函数都假定数据是 ANSI 编码的。对于 SQLite,它完全支持 Unicode,并且使用使用 UTF-8 编码的 char* 数据来支持。

如果您打算继续在您的应用程序内部使用 UTF-16 编码文本,您需要在您的代码和 SQLite 代码之间的边界添加一个适配器层。将数据传递给 SQLite 时从 UTF-16 转换为 UTF-8,接收时则相反。

在我看来,您提出的问题有点没有实际意义,但我还是会解决这个问题:

Are there any limitations or negative impacts from using ANSI Functions in a Unicode Application?

使用 ANSI 函数最明显的缺点是:

  1. 严格限制字符集。
  2. 在不同字符集之间转换时的性能成本。
  3. 由于在单个代码库中使用多个字符集而导致程序员混淆和错误的风险。

关于c++ - 在 Unicode 应用程序中使用 ANSI 函数是否有任何限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008905/

相关文章:

c++ - 打印指针值

pdf - 将MathematicalPI符号名称转换为Unicode

使用 -O1 编译时 C++ regex_search 中断

c++ - 与 Clang 和 Boost 1.48 一起工作的多播委托(delegate)/信号库?

c++ - WSARecv() 可以立即返回数据吗?

c++ - 为什么我的非所有者绘制的列表框在添加字符串后出现绘图问题?

c++ - Win32/MFC 从客户端矩形获取窗口矩形

java - 如何在servlet中处理编码的unicode文本?

java - Java 中的 Unicode 转义语法

c++ - 如何修复 "undefined reference"编译器错误