NIM_Duilib_Framework
NIM_Duilib_Framework copied to clipboard
RichEdit乱码
测试为下面几种情况:
- 当RichEdit中设置的为仅为
韩文时,显示正常。 - 当RichEdit中设置的为
韩文+中文时,显示正常。 - 当RichEdit中设置的为
韩文+日文时,显示正常。 - 当RichEdit中设置的为
韩文+阿拉伯文时,韩文显示不正常。

测试为下面几种情况:
- 当RichEdit中设置的为仅为
韩文时,显示正常。- 当RichEdit中设置的为
韩文+中文时,显示正常。- 当RichEdit中设置的为
韩文+日文时,显示正常。- 当RichEdit中设置的为
韩文+阿拉伯文时,韩文显示不正常。
GDIPlus绘制文字,选进内存的字体如果没有该语言字体绘制不出来,我试了下WebFont代替ICON,添加内存字体后,基本也是只能显示指定的几个图标和默认字体中的文字。 绘制多语言根据不同语言文字加载不同字体呗
我现在使用的是中文系统,是不是说我的机器必须装阿拉伯字体?
你所说的:
绘制多语言根据不同语言文字加载不同字体
不是很明白。能否说的更详细一点?
从图中可以看到,实际上韩文是可以正确显示的(1-3种情况),而且阿拉伯文也可以正确显示的(第四种情况)。 但是当韩文和阿拉伯文混在一起的时候,阿拉伯文显示正常,韩文显示不正常。
你试试使用其他字体看看是否表现出来的状况不一样,如果一样,可能跟我的情况不同,那么可能就是编码问题了,你看看你用的是unicode编码还是多字节集,unicode下边我没复现出来你说的问题,多字节没试。出现这种情况还有可能是编码转换。光四幅图好难判断
项目使用的是unicode编码。代码是使用的https://github.com/netease-im/NIM_PC_Demo仓库的源码。真正出错的地方在
https://github.com/netease-im/NIM_PC_Demo/blob/master/tool_kits/ui_component/ui_kit/gui/session/control/bubbles/bubble_text.cpp
void MsgBubbleText::SetMsgText( const std::wstring &str )
{
if(str.empty())
{
text_->SetFixedWidth(10);
text_->SetFixedHeight(20);
}
else
{
text_has_emoji_ = InsertTextToEdit(text_, str) > 0;
}
}
我使用调试器看过这里的str变量,调试器显示的内容完全正确,但是显示到界面上就是乱码。
我甚至将str的内容直接写成常量字符串试了一下,同样的乱码。
std::wstring tmp_str = L"안녕하세요 مرحبا";
text_has_emoji_ = InsertTextToEdit(text_, tmp_str) > 0;
如果我直接使用“韩文+中文”:
std::wstring tmp_str = L"안녕하세요 你好";
text_has_emoji_ = InsertTextToEdit(text_, tmp_str) > 0;
就不会出现乱码