Boost
arrow_drop_down
Boost.Nowide
M
D

本次发布

Artyom Beilis
Artyom Beilis
作者
Alexander Grund
维护者
Rene Rivera
Rene Rivera
贡献者 - 新
Alexander Grund
Alexander Grund
贡献者

依赖项

Boost.Nowide

分支 Appveyor GitHub codecov.io 依赖 文档 测试
master Build status Build status codecov Deps Documentation Tests
develop Build status Build status codecov Deps Documentation Tests

质量检查:Coverity Scan Build Status CodeFactor

用于跨平台、支持 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] 标签。

全部时间

David Wedderwille
David Wedderwille
贡献者
Dirk Stolle
Dirk Stolle
贡献者
Edward Diener
Edward Diener
贡献者
Christoph Reiter
Christoph Reiter
贡献者
Tatsunori Uchino
Tatsunori Uchino
贡献者
jack
jack
贡献者
Alexey Mednyy
Alexey Mednyy
贡献者