【问题标题】:RichTextBox use to retrieve Text property in C++RichTextBox 用于在 C++ 中检索 Text 属性
【发布时间】:2009-11-27 21:10:53
【问题描述】:

我正在使用隐藏的 RichTextBox 从 RichEditCtrl 检索 Text 属性。 rtb->文字;返回 国家/地区 语言中任一 English 的文本部分——太好了!

但是我需要 \u12232 中的这个文本吗? \u32232?而不是国家字符和符号。与我的数据库和 RichEditCtrl 一起工作。知道如何从“пассажирским поездом Невский”到“\u12415?\u12395?\u23554?\u20219?\u30456?\u35527?\u21729?(在哪里每个国家字符都表示为“\u23232?”

如果你有,那就太好了。 我正在使用 MFC 和托管代码的 Visual Studio 2008 C++ 组合。

干杯,周末愉快

【问题讨论】:

    标签: unicode richtextbox


    【解决方案1】:

    如果您还需要 System::String 作为输出,那么可以这样做:

    String^ s = rtb->Text;
    StringBuilder^ sb = gcnew StringBuilder(s->Length);
    for (int i = 0; i < s->Length; ++i) {
        sb->AppendFormat("\u{0:D5}?", (int)s[i]);
    }
    String^ result = s->ToString();
    

    顺便问一下,你确定格式和描述的一样吗? \u十六进制 Unicode 代码点的传统转义序列,正好是 4 个十六进制数字长,例如\u0F3A? 通常也不跟在它后面。如果你真的想要这样,格式说明符 {0:X4} 应该可以解决问题。

    【讨论】:

    • 感谢帕维尔。今晚我会试试你的建议。至于格式,那些 \u12395?\u23554?正如您正确指出的那样,等是UNICODE hex。我从调试输出中剪切并粘贴了一个示例 - 所以“?”根据语言,真正遵循 5 或 3 位数字的 \u。你是哪里人?
    • 如果它们是十六进制,则不应有 5 个数字,因为 \u 在 C++ 和 C# 中只允许四个(并且需要四个)。你删掉了什么“调试输出”?
    • Pavel 在上面的示例中,您正在写亚洲语言的 5 位数字,例如中文 (\u20219?\u30456?\u35527?) 或俄语 (\u1086?\u1084?\u1099?)。正如我从希腊语中得到的那样,这里似乎只有 3 位数字可用:“\u957?\u946?\u959?”我所有的例子都是 sn-ps 不是完整的句子。我正在进行第一个内部语言项目,并且玩得很开心;-) 在度过了漫长的一天和几杯啤酒后,我刚从大学回来。明天我会以全新的方式尝试这些东西。女贞
    【解决方案2】:

    您不需要使用转义将格式化的 Unicode 放入 RichText 控件。您可以使用 UTF-8。在这里查看我的答案:Unicode RTF text in RichEdit

    我不确定你的数据库有什么限制,但也许你也可以在那里使用 UTF-8。

    【讨论】:

    • 哇,很棒的回答文章!如果我没看错,你的 PSTR Utf8;看起来像“\u12395?\u23554?\u20219?”当 PWSTR WideString = "Сотрудники главного управления МЧС "。我说的对吗?
    • UTF-8 的工作方式,每个大于 128 的 WCHAR 值将表示为 2 到 4 个 CHAR 值之间的任意值...例如 L"д" 将是 "\xd0\xb4" .您可以在 UTF-8 的 Wikipedia 文章中阅读有关其工作原理的更多信息。
    • 再次感谢哥们,你帮了很多忙。干杯,今晚在大学城和我的朋友们聚会后我需要休息一下。我明天会尝试修复我的代码;-)
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2012-04-09
    • 2011-08-03
    • 1970-01-01
    • 2011-01-24
    • 2012-09-13
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多