在 Windows 上使用 UTF-8 API 的标准库函数。
本次发布
依赖项
Boost.Nowide
分支 | Appveyor | GitHub | codecov.io | 依赖 | 文档 | 测试 |
---|---|---|---|---|---|---|
master | ||||||
develop |
用于跨平台、支持 Unicode 编程的库。
该库提供了标准 C 和 C++ 库函数的实现,使其在 Windows 上能够感知 UTF-8 输入,而无需使用宽字符 API。
License
根据 Boost Software License, Version 1.0 分发。
属性
- 可选 C++17 (filesystem) 支持
- 可通过 CMake 在 Boost 外部使用
- 每个操作系统上都有编译好的库
关于最后一点的说明:拥有一个已编译的库可以实现跨平台访问,例如 setenv
,而使用 -std=c++nn
标志将无法获得此功能。这与包含在 Boost 中之前的版本不同。
要求(所有版本)
- C++11(或更高版本)兼容的编译器
- MSVC 2015 及以上版本可用
- libstdc++ < 5 不受支持,因为它悄悄地缺少 C++11 功能
- 使用 B2 构建时,如果您的编译器默认使用 C++03,请传递
cxxstd=11
等参数
要求(Boost 版本)
- Boost (>= 1.56)
- CMake(当不作为 Boost 的一部分使用时)或 B2(否则)
要求(独立版本)
独立分支跟踪 develop 分支,并且可以独立于 Boost 的其他部分使用。它会自动更新,因此建议引用特定提交。您也可以使用独立源代码存档,它是每个发布版本的一部分。
- CMake
快速入门
不要使用标准的库函数,而是使用 Boost.Nowide 中同名的相应成员。在 Linux 上,这些(大部分)是 std
函数的别名,但在 Windows 上,它们接受 UTF-8 作为输入,并使用宽字符 API 来实现底层功能。
示例
std::ifstream -> boost::nowide::ifstream
std::fopen -> boost::nowide::fopen
std::fclose -> boost::nowide::fclose
std::getenv -> boost::nowide::getenv
std::putenv -> boost::nowide::putenv
std::cout -> boost::nowide::cout
要在 Windows 上转换输入参数为 UTF-8,请使用
int main(int argc, char **argv)
{
boost::nowide::args _(argc, argv); // Must use an instance!
...
}
有关详细信息,请参阅 文档。
编译
使用 Boost
通过 ./b2
以通常的方式编译并安装 Boost 超级项目。然后,头文件和库将与其他所有 Boost 库一起可用。在 CMake 中,您可以使用 find_package(Boost COMPONENTS nowide)
并链接到 Boost::nowide
。请注意,find_package(boost_nowide)
也可以找到包,但上述是规范方法。
使用 CMake
Boost.Nowide 完全支持 CMake。因此,您可以使用 add_subdirectory("path-to-boost-nowide-repo")
并将您的项目链接到目标 Boost::nowide
。
您也可以通过常规流程预编译和安装 Boost.Nowide。
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make install
CMake-Config 文件将与 Boost.Nowide 一起安装,因此 find_package(boost_nowide)
可以开箱即用(前提是它已安装到“标准”位置或其 INSTALL_PREFIX
已添加到 CMAKE_PREFIX_PATH
)。
Boost.Filesystem 集成
Boost.Nowide 与 Boost.Filesystem 集成
- 调用
boost::nowide::nowide_filesystem()
可将 UTF-8 注入 Boost.Filesystem(供boost::filesystem::path
使用),以便在 Windows 上将传递给 Boost.Filesystem 的窄字符串视为 UTF-8。
更多信息
- 提问
- 报告错误:请务必提及您使用的 Boost 版本、平台和编译器。提供一个小型的可编译代码示例来重现问题总是很有帮助。
- 请将您的补丁作为拉取请求提交到 develop 分支。请注意,提交补丁即表示您同意根据 Boost Software License, Version 1.0 许可您的修改。
- 有关该库的讨论在 Boost 开发者邮件列表上进行。在发布之前,请务必阅读 讨论政策,并在主题行开头添加
[nowide]
标签。