V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sanyang001
V2EX  ›  Android

有没有 Native 大佬求教

  •  
  •   sanyang001 · 193 天前 · 4005 次点击
    这是一个创建于 193 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目要搞原生 C++开发,涉及到多语言,发现 string 转 wstring 方法太难了,求有经验的大佬指点。

    1. wcstombs 、mbstowcs 方法转出的字符有问题。

    2. wstring_convert 只适用于 C++11 、C++14 ,低端机崩溃哇哇的。

    3. MultiByteToWideChar 只适用于 windows 。

    4. string copy 方法不适合多语言。

    太难了

    9 条回复    2023-10-18 14:19:40 +08:00
    feng32
        1
    feng32  
       193 天前
    路径大致有 2 条吧

    1. 使用宏区分不同平台,调用各自的原生方法
    2. 使用跨平台的 C++ 框架 (比如 Qt)
    liberize
        2
    liberize  
       193 天前 via Android
    wcstombs 、mbstowcs 搭配 setlocale 使用。
    ysc3839
        3
    ysc3839  
       193 天前 via Android
    一般情况下 C/C++ 不需要用到 wchar_t 吧?大多数平台上 wchar_t 是 4 字节的 UTF-32 ,很浪费空间,除非是要遍历字符。wchar_t 一般是 Windows 才用,是 2 字节的 UTF-16 。
    大多数情况下是直接用 char 存 UTF-8 ,一定要用 wchar_t 的话,找个 UTF-8 转 UTF-32 的代码即可,Windows 下可以找个 UTF-8 转 UTF-16 的,或者直接用 MultiByteToWideChar 。
    别用 wcstombs ,印象中跟 locale 啥的有关,坑多。
    ysc3839
        4
    ysc3839  
       193 天前 via Android
    另外建议说一下具体情况,为什么要用到 wchar_t ?
    asuraa
        5
    asuraa  
       193 天前
    string 本身是没编码的 区别在于你咋用 你用来存 utf8 就是 utf8 你用来存多字节就是多字节 甚至可以存 Unicode
    tairan2006
        6
    tairan2006  
       192 天前
    用 QString
    sanyang001
        7
    sanyang001  
    OP
       192 天前
    @ysc3839 多语言,有个查找算法,需要遍历查找每个字符匹配查询。
    ysc3839
        8
    ysc3839  
       192 天前 via Android
    @sanyang001 那转成 UTF-32 进行遍历吧。如果不是频繁匹配的话,有流式的 UTF-8 转 UTF-32 方案,可以读一个字符解析一下,不需要拷贝多一份 UTF-32 的字符串。如果频繁匹配且不介意内存占用的话,可以转换成 UTF-32 存起来。
    sanyang001
        9
    sanyang001  
    OP
       192 天前
    @ysc3839 多谢建议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   880 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:47 · PVG 05:47 · LAX 14:47 · JFK 17:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.