问题标签 [boost-locale]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
105 浏览

file-io - 没有广泛 API 的可移植 UTF-8 接口(Windows 和 Unix)

我正在使用以下界面设置硬盘驱动器上文件的路径:

此路径将用于基本文件 I/O。

例如,如果我提供一个包含中文字符的路径(例如通过 QString::toUtf8()),这对于 Unix 来说很好,但对于 Windows 来说当然不行,因为内部使用了 wchar/wstring API。

我现在正在寻找一种优雅的方法来使这个接口 UTF-8 在基于 Windows 和 Unix 的系统上兼容。有没有办法避免在基于 Windows 的系统上使用广泛的 API 并继续使用 std::string 和 std::ofstream() ?

在查看 boost::locale 之后,这在我看来是一种处理 UTF-8 编码的可能性。这会是一种方法吗(例如,用 boost::ofstream() 对应物替换 std::ofstream ?)

感谢所有帮助。

0 投票
3 回答
2039 浏览

c++ - 使用 iconv 为 iOS 构建 Boost.Locale

我目前正在尝试为 iOS 构建 Boost.Locale,但我无法找到 iconv 库(我正在为 iOS 成功构建 Boost 的其他部分,例如threadfilesystem)。

我试图让 Boost.Build 自己找到它,我试图将ICONV_PATH变量设置为指向 iPhoneOS SDK iconv lib。检查 Boost.Locale 中的 Jamfile,我偶然发现了这条规则:

所以我认为设置-sICONV_PATH/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr足够了,因为这个目录包含一个lib和一个include包含 iconv 库和头文件的文件夹,但是 Boost 仍然找不到它,并吐出:

请注意,我总是b2使用该--reconfigure选项进行调用,因此它不是缓存先前调用的结果(在上面的列表中会有一个尾随(cached)

那么,有没有办法正确地将 Boost 指向 iOS SDK 中的 iconv 实现?如果可能的话,我想避免建立一个单独的 iconv。

0 投票
1 回答
1166 浏览

c++ - stod 不能与 boost::locale 一起正常工作

我试图在逗号是小数点分隔符的德语语言环境中一起使用 boost::locale 和 std::stod 。考虑这段代码:

std::locale loc("") 创建正确的语言环境,输出为

正如我所料。当我注释掉第 (1) 行并取消注释第 (2) 行时,输出为

d2 的结果是意料之中的。据我了解 boost::locale 希望我明确指定 d2 应格式化为数字并执行

再次将输出固定为 2,2。问题是 std::stod 不再将 1,1 视为有效的浮点数并将其截断为 1。

我的问题是:为什么当我使用 boost::locale 生成我的语言环境时 std::stod 停止工作?

附加信息:我使用的是 VC++2015,Boost 1.60,没有 ICU,Windows 10

更新:

我注意到,当我两次设置全局语言环境时,问题已得到解决,首先是 std::locale(""),然后是 boost:

不过,我不知道它为什么会这样!

0 投票
1 回答
1323 浏览

c++ - 在 Mac 中使用 C++ 读取 UTF-8 数据不起作用

尽管我的 C++ 经验已大大减少,但我正在尝试帮助 C++ 程序员让他的库在 Mac 上运行。目前,问题似乎仅与语言环境/编码有关。

为了创建一个最小的工作示例,我测试了以下代码,它将一行 UTF-8 字符读取为一个宽字符串 (wstring),然后遍历该字符串并打印每个字符。

虽然它在 Linux 机器上完美运行,所有字符都打印在不同的行中,但在使用 Mac 机器时,我每行打印每个字节(而不是每个字符)。

代码是:

我的测试字符串是一个愚蠢的葡萄牙语句子:

我正在尝试使用 Boost_locale,因为有人告诉我这是让 unicode 在 Mac 上正常工作的方法,但我很高兴有一个仅使用 C++ 标准库的解决方案。

编辑:

以下代码适用于 Mac。由于包含 codecvt,它无法在我的 Linux 机器上编译,但我可以通过一些 CPP 指令来管理它。

0 投票
2 回答
1573 浏览

c++ - 获取 boost::locale::conv 中函数的用户代码页名称

手头的任务

我正在从 Windows 上的 UTF-8 编码 XML 解析文件名。我需要将该文件名传递给我无法更改的函数。它在内部使用_fsopen()不支持 Unicode 字符串的。

目前的方法

我目前的方法是将文件名转换为用户的字符集,希望文件名可以在该编码中表示。然后我boost::locale::conv::from_utf()用来从 UTF-8 转换,我boost::locale::util::get_system_locale()用来获取当前语言环境的名称。

生活很好?

我在使用代码页Windows-1252的德语系统上,因此get_system_locale()正确生成de_DE.windows-1252。如果我使用包含变音符号的文件名测试该方法,那么一切都会按预期工作。

问题

只是为了确保我将系统区域设置切换为使用代码页Windows-1251的乌克兰语。在文件名中使用一些西里尔字母我的方法失败了。原因是get_system_locale()仍然产生de_DE.windows-1252现在不正确。

另一方面GetACP(),德国语言环境正确产生 1252,乌克兰语言环境正确产生 1251。我也知道 Boost.Locale 可以转换为给定的语言环境,因为这个小型测试程序可以按我的预期工作:

问题

  • 如何以 Boost.Locale 支持的格式查询用户语言环境的名称?使用yield German_Germany.1252std::locale("").name(),使用它会导致异常。boost::locale::conv::invalid_charset_error

  • 尽管我应该将其更改为本地管理员,但系统区域设置是否可能仍然是de_DE.windows-1252 ?同样,系统语言是德语,尽管我的帐户的语言是英语。(在我登录之前,登录屏幕是德语)

  • 我应该坚持使用短文件名吗?虽然似乎不能可靠地工作。

印刷精美

  • 编译器是 MSVC18
  • Boost 是 1.56.0 版本,后端据说是 winapi
  • 系统是Win7,系统语言是德语,用户语言是英语
0 投票
0 回答
136 浏览

c++ - 在 Boost 中使用 UnicodeString

我已阅读该ICUbackendboost::locale. 如果是这样,我们可以UnicodeString在 boost 中使用 ICU 的类型吗?有人可以举个例子吗..

编辑:这是我最后尝试的。在这里,我需要一个 UnicodeString,而不是存储到 wstring。

0 投票
1 回答
277 浏览

c++ - 通过 Boost.ProgramOptions 使用类似 gettext 的翻译

我试图提供std::string参数作为选项的描述。一般而言,其生命范围未定义的论点。具体来说,我想提供翻译。

add_options()返回一个实例,options_description_easy_init该实例预先定义了()运算符,以便您可以使用上面的语法。现在,该操作员只接受const char*描述,这让我很恼火。因此,我有以下问题:

  1. 解决这个问题的方法是什么?
  2. 这个类的所有权政策是什么?这些指针是否仅存储,因此源应该与描述一样多地存在,或者它是安全的(糟糕!):

    /li>
  3. const char_type*作为描述参数的理由是什么?

0 投票
1 回答
285 浏览

c++ - boost::locale::date_time:如何从 Boost C++ 中的 date_time 对象获取数据?

我试图在我的代码中处理日期和时间,并且已经指向了 boost 库的方向——特别是 boost::locale::date_time (部分是因为这让我避免了夏令时的怪异,这让我以前的实施困难)。

但是,我得到的结果不一致。当我将日期存储在 date_time 对象中,然后尝试从中获取数据时,这是不正确的。这是一个例子:

我究竟做错了什么?我只想提取保存的天、月、年、小时等。

谢谢你。

编辑:我最初可能以不正确的方式设置 date_time 。假设我有整数(不是字符串)格式的所有相关数据,是否有更好的方法来显式设置日期时间(例如,设置为 2016 年 12 月 19 日)?

0 投票
0 回答
253 浏览

c++ - boost::locale::conv::from_utf 在 Ubuntu 上不起作用

我正在尝试将带有特殊引号符号的 utf-8 字符串转换为 Latin1。代码在 Windows 上完美运行,但省略了 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 上的符号

字符串:Latin1:APOST ( ' ) QUOTE ( " ) ( « » )
Windows:Latin1:APOST ( ' ) QUOTE ( " ) ( < > )
Ubuntu:Latin1:APOST ( ) QUOTE ( ) ( )

转换后的字符串的十六进制表示:

如何获得类似于 Windows 的 Ubuntu 结果?

使用 iconv 在 Ubuntu 上的结果

0 投票
1 回答
862 浏览

android - 如何为 android 构建 boost::locale

我有一个项目,它的 boost 1.64 可以在 android 上运行。现在,我需要启用boost::locale依赖于ICU/ ICONVlibs 的库。我下载了https://github.com/pelya/libiconv-libicu-android,并成功编译。然后我添加列表

到我的 cmake 文件。但不幸的是,升压日志仍然告诉我:

构建 Boost C++ 库。

boost::locale官方文档中,我发现似乎 ICU 库是共享库,但 libiconv-libicu-android 只提供静态库。有关系吗?

希望任何人都可以提供帮助,在此先感谢。