首页 > 解决方案 > Stream Deck C++ 插件中的 Unicode 字符串

问题描述

StreamDeck SDK 允许使用 C++ 和 JavaScript 编写插件。我使用的功能之一是设置键标题:

void SetTitle(const std::string &inTitle, const std::string& inContext, ESDSDKTarget inTarget);

inTitle是设备键上显示的标题。此项目中的所有函数都只接受char*字符串。在内部,SetTitle生成 JSON 对象并使用 WebSocket 将其发送到 StreamDesk 程序。

我需要用不同的语言设置标题。JavaScript 插件允许通过简单的方式做到这一点,例如:

SetTitle : function(context, keyPressCounter) {
    var json = {
        "event": "setTitle",
        "context": context,
        "payload": {
            //"title": "" + keyPressCounter,
            "title": "ы",
            "target": DestinationEnum.HARDWARE_AND_SOFTWARE
        }
    };

    websocket.send(JSON.stringify(json));
}

此函数在设备上成功显示俄罗斯字母“ы” (0x044B)。使用 WireShark,我发现了这个数据包:

{"event":"setTitle","context":"6AB547E3C555617462ABD483D36ED595","payload":{"title":"\321\213","target":0}}

所以,字符串实际上是0xd1, 0x8b, 或\321\213\。如果我在 C++ 程序中使用这个字符串:

mConnectionManager->SetTitle("\321\213", context, kESDSDKTarget_HardwareAndSoftware);

一切正常,显示字母“ы”。但这是硬编码字符串。我需要将任何wchar_t*字符串转换为char*. 这里使用什么算法?第三方程序如何将Unicode字符0x044B转换为0xd1 0x8b?我需要明白这一点。

标签: javascriptc++jsonunicodewebsocket

解决方案


推荐阅读