【问题标题】:How do I get wcsftime to work in Visual Studio CRT?如何让 wcsftime 在 Visual Studio CRT 中工作?
【发布时间】:2014-01-07 11:57:37
【问题描述】:

Visual Studio CRT 附带的wcsftime 的实现似乎有一个完全令人难以置信的错误!据我所知,它只是不支持 unicode。

在内部,它转换为单字节(使用当前的单字节代码页),然后调用strftime,然后返回多字节。真是笑话!如果宽版不比窄版好,为什么还要发布宽版?

如果我调用 wcsftime(L"ümlaut ş"),元音变音有效(因为它包含在 Latin-1 中)但 s-cedilla 不会(它显示为 L"ümlaut ?")。

我只想写一个围绕wcsftime 的包装器,它返回UTF-8 数据,但无论如何我似乎无法从wcsftime 中获得全部的Unicode(更不用说strftime)了我做什么。

这些功能在 CRT 中是否从根本上被破坏了?我是否必须发布自己的实现才能让strftime 格式字符串在我的跨平台应用程序中工作?

【问题讨论】:

    标签: windows visual-studio unicode localization msvcrt


    【解决方案1】:

    这是 wcsftime 的一个已知问题,您根本不应该使用不是来自所选语言环境的格式的字符来格式化日期和时间。您也可以尝试使用 GetDateFormat / GetTimeFormat 函数,但我不确定它们是否能如您所愿。其他解决方案是在调用 wcsftime 之前将所有字符编码为十六进制(例如“ş”“@015E”)并在调用它之后解码。

    【讨论】:

      【解决方案2】:

      为了记录,我的解决方案是实现我自己的strftime(将它添加到我已经必须在 Windows 上重新实现的十四组 ISO C 函数的列表中)。我的strftime 正确使用了语言环境,采用 UTF-8 格式字符串,并用直接从GetLocaleInfoEx 和GetDateFormatW 获得的数据适当地替换了标记,这与损坏的 CRT 版本不同。叹息。

      【讨论】:

        猜你喜欢
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-29
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多