在 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.66)
- CMake(当不作为 Boost 的一部分使用时)或 B2(否则)
要求(独立版本)
独立分支跟踪 开发分支,并且可以在没有任何其他 Boost 部分的情况下使用。它会自动更新,因此建议引用特定提交。您也可以使用独立的源代码存档,它是每个发布版本的一部分。
- CMake
快速入门
不要使用标准库函数,而要使用 Boost.Nowide 中同名的相应成员。在 Linux 上,这些(大部分)是 `std` 函数的别名,但在 Windows 上,它们接受 UTF-8 作为输入,并使用宽字符 API 进行底层功能。
示例
std::ifstream -> boost::nowide::ifstreamstd::fopen -> boost::nowide::fopenstd::fclose -> boost::nowide::fclosestd::getenv -> boost::nowide::getenvstd::putenv -> boost::nowide::putenvstd::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]` 标签。