xlocale 在 OS X 上损坏?

2024-03-23

我有一个简单的程序,它使用命令行上传递给它的一系列语言环境来测试 wchar_t 和 char 之间的转换。它通过打印区域设置名称和转换失败的字符串来输出失败的转换列表。

我正在使用 clang 和 libc++ 构建它。我的理解是 libc++ 的命名语言环境支持是由 OS X 上的 xlocale 库提供的。

我看到一些意外的失败,以及一些转换应该失败但没有失败的情况。

这是程序。

#warning call this program like: "locale -a | ./a.out" or pass \
locale names valid for your platform, one per line via standard input

#include <iostream>
#include <codecvt>
#include <locale>
#include <array>

template <class Facet>
class usable_facet : public Facet {
public:
    // FIXME: use inheriting constructors when available
    // using Facet::Facet;
    template <class ...Args>
    usable_facet(Args&& ...args) : Facet(std::forward<Args>(args)...) {}
    ~usable_facet() {}
};

int main() {
    std::array<std::wstring,11> args = {L"a",L"é",L"¤",L"€",L"Да",L"Ψ",L"א",L"আ",L"✈",L"가",L"????"};

    std::wstring_convert<usable_facet<std::codecvt_utf8<wchar_t>>> u8cvt; // wchar_t uses UCS-4/UTF-32 on this platform

    int convert_failures = 0;
    std::string line;
    while(std::getline(std::cin,line)) {
        if(line.empty())
            continue;

        using codecvt = usable_facet<std::codecvt_byname<wchar_t,char,std::mbstate_t>>;
        std::wstring_convert<codecvt> convert(new codecvt(line));

        for(auto const &s : args) {
            try {
                convert.to_bytes(s);
            } catch (std::range_error &e) {
                convert_failures++;
                std::cout << line << " : " << u8cvt.to_bytes(s) << '\n';
            }
        }
    }

    std::cout << std::string(80,'=') << '\n';
    std::cout << convert_failures << " wstring_convert to_bytes failures.\n";
}

以下是一些正确输出的示例

en_US.ISO8859-1 : €
en_US.US-ASCII : ✈

这是一个非预期输出的示例

en_US.ISO8859-15 : €

欧元字符确实存在于 ISO 8859-15 字符集中,因此这应该不会失败。

以下是我期望但未收到的输出示例

en_US.ISO8859-15 : ¤
en_US.US-ASCII : ¤

这是 ISO 8859-1 中存在的货币符号,但在 ISO 8859-15 中已被删除并替换为欧元符号。此转换不应成功,但不会发出任何错误信号。当进一步检查这个案例时,我发现在这两种情况下“¤”都被转换为 0xA4,这是“¤”的 ISO 8859-1 表示形式。

我没有直接使用 xlocale,只是通过 libc++ 间接使用。 Mac OS X 上的 xlocale 是否只是因为错误的区域设置定义而被破坏?有办法解决吗?或者我看到的问题是其他原因造成的吗?


我怀疑您遇到了 xlocale 系统的问题。 A错误报告 https://developer.apple.com/bugreporter/bugrptform.html将不胜感激!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xlocale 在 OS X 上损坏? 的相关文章

随机推荐

  • 使用 Open Office SDK 2.0 将 PowerPoint 2007 另存为 PowerPoint 2003

    是否可以使用 Open Office SDK 2 0 将使用 OOXML 创建的 PowerPoint 演示文稿保存到 PowerPoint 2003 演示文稿 我知道如果您打开 2007 年文件并单击 另存为 您可以选择将其另存为 Pow
  • ASP.NET:空载下 CPU 使用率高

    几周以来我面临着一个巨大的问题 我有一个在 IIS7 W2008 SP1 下托管的 asp net 应用程序 每隔几个小时 当可能没有用户连接时 它就会开始消耗近 50 的 CPU 这是可以理解的 因为我们正在使用 Quartz net 来
  • C++ 中的可调用类对象:没有匹配的函数可用于调用“std::tuple::tuple()”

    我的代码由 2 个文件组成 main cpp and utils hpp 这些文件的内容如下 实用程序 hpp ifndef UTILITY HPP define UTILITY HPP include
  • 如何更改/修改 NSPopUpButton 的显示标题

    我想要一个NSPopUpButton显示与所选菜单项标题不同的标题 假设我有一个NSPopUpButton让用户选择货币列表 如何让折叠 关闭按钮仅显示货币缩写而不是所选货币的菜单标题 这是货币的全名 我想我可以重写子类中的绘制 NSPop
  • HTTPS 网站上的 Youtube Iframe

    我使用 https 包含了一个指向网站上 YouTube 视频的 iframe 虽然我使用 https 嵌入了 YouTube 视频 但当我单击播放时 视频会加载 http 文件 从而使浏览器安全图标 不安全 如何强制 youtube 仅加
  • Zxing扫描仪相机变焦

    我已经尝试解决这个问题3天了 但仍然没有找到答案 我想在通过 Zxing 扫描仪扫描二维码时向相机添加 ZOOM 构建 gradle implementation me dm7 barcodescanner zxing 1 9 8 Xml
  • 如何在 JPA 中捕获 OptimisticLockException

    我在这里读了几个关于OptimisticLockException与 JPA 一起使用 用于无状态会话 bean 它被抛出 但显然不是我期望的地方 这是我期望得到异常的代码 try productFacade edit product ca
  • 将 UIWebView 完整内容导出到 NSData? iPhone

    我想做的是得到UIWebView完整内容 文本 图像和 CSS 包含在一个小包中 我估计NSData将是最好的方法 或者还有其他更压缩的版本吗 可能已经晚了 无法对此作出回应 但我发现您可以从使用 NSCachedURLResponse 发
  • 使用鼠标右键单击时会选择 Datagrid WPF 上的禁用行

    我在 Datagrid WPF 中遇到一些问题 我有一个数据网格 每当用户为数据网格 itemSource 的绑定项分配值时 我想将单行的 IsEnabled 属性设置为 false 所以我通过 datagrid 样式触发器做到了
  • EF Include 始终为第一个导航属性生成 INNER JOIN

    我正在使用代码优先方法并具有以下模型 public class Person public int ID get set public string Name get set public int CurrentStationID get
  • 在 JTextArea 中剪切和粘贴

    我正在开发一个应用程序 它要求 JTextArea 中只有 165 个字符 我已经强加了这个条件 我使用静态计数器来计算在文本区域中输入的字符数 并进行编码以处理用户从文本中删除任何字符串时的情况 计数器必须通过考虑所选字符串的长度来增加
  • zsh:找不到命令:导入[重复]

    这个问题在这里已经有答案了 我正在使用 MAC OS Catalina 版本 10 15 1 并且正在开发一个 python 项目 每次我在命令行版本 2 10 433 上使用命令 import OS 时 都会收到以下消息 zsh 找不到命
  • 需要在命令提示符中导航到文件夹[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的命令提示符在 C Users 名称 中启动 我需要将其放在不同的文件夹中 如何使用命令提示符本身来执行此操作 导航到 Windows
  • Boost dijkstra Shortest_path - 如何获得最短路径而不仅仅是距离?

    我需要使用 Boost 库来获得从一点到另一点的最短路径 我已经查看了示例代码 它非常容易理解 然而 该示例仅展示了如何获取总距离 我正在尝试找出如何迭代前趋映射以实际get最短路径 我似乎无法弄清楚 我读过有关该主题的两个问题 boost
  • matplotlib 与事件处理程序的多个连接?

    import sys import matplotlib import matplotlib pyplot as plt print matplotlib version matplotlib get backend def hit eve
  • 无法设置Emacs Speedbar缓冲区显示模式

    我经常在 emacs 上使用不同的活动缓冲区 例如 源文件 SQL缓冲区 外壳缓冲区 我尝试让 speedbar 始终显示缓冲模式 但我找不到任何可以在 emacs 启动时加载此显示的选项 默认为文件模式 并在所有会话期间保留它 我还尝试了
  • 无法发布环聊应用(扩展程序)

    我已经创建了一个 Google Hangout 扩展应用程序 并私下测试了它的工作原理等 现在我正在尝试发布它 我已按照此处的说明进行操作 https developers google com hangouts publishing ht
  • 应用程序上下文bean

    我正在尝试从应用程序上下文中提取 bean 所以我定义了类 public class ApplicationContextProvider implements ApplicationContextAware private static
  • 在没有 MVC 的纯 ASP.NET Web API 服务中,我们是否还需要 Global.asax 中的 AreaRegistration.RegisterAllAreas()

    我正在尝试创建一个干净的 ASP NET Web API 服务 如果可能的话 不引用 MVC 程序集 我关注了这个博客http www codeproject com Articles 615805 Creating a Clean Min
  • xlocale 在 OS X 上损坏?

    我有一个简单的程序 它使用命令行上传递给它的一系列语言环境来测试 wchar t 和 char 之间的转换 它通过打印区域设置名称和转换失败的字符串来输出失败的转换列表 我正在使用 clang 和 libc 构建它 我的理解是 libc 的