NIM_Duilib_Framework icon indicating copy to clipboard operation
NIM_Duilib_Framework copied to clipboard

RichEdit乱码

Open haifenghuang opened this issue 5 years ago • 4 comments

测试为下面几种情况:

  1. 当RichEdit中设置的为仅为韩文时,显示正常。
  2. 当RichEdit中设置的为韩文+中文时,显示正常。
  3. 当RichEdit中设置的为韩文+日文时,显示正常。
  4. 当RichEdit中设置的为韩文+阿拉伯文时,韩文显示不正常。

aaa

haifenghuang avatar Oct 21 '20 13:10 haifenghuang

测试为下面几种情况:

  1. 当RichEdit中设置的为仅为韩文时,显示正常。
  2. 当RichEdit中设置的为韩文+中文时,显示正常。
  3. 当RichEdit中设置的为韩文+日文时,显示正常。
  4. 当RichEdit中设置的为韩文+阿拉伯文时,韩文显示不正常。

aaa

GDIPlus绘制文字,选进内存的字体如果没有该语言字体绘制不出来,我试了下WebFont代替ICON,添加内存字体后,基本也是只能显示指定的几个图标和默认字体中的文字。 绘制多语言根据不同语言文字加载不同字体呗

freelysuiyi avatar Oct 21 '20 13:10 freelysuiyi

我现在使用的是中文系统,是不是说我的机器必须装阿拉伯字体?

你所说的:

绘制多语言根据不同语言文字加载不同字体

不是很明白。能否说的更详细一点?

从图中可以看到,实际上韩文是可以正确显示的(1-3种情况),而且阿拉伯文也可以正确显示的(第四种情况)。 但是当韩文和阿拉伯文混在一起的时候,阿拉伯文显示正常,韩文显示不正常。

haifenghuang avatar Oct 21 '20 14:10 haifenghuang

你试试使用其他字体看看是否表现出来的状况不一样,如果一样,可能跟我的情况不同,那么可能就是编码问题了,你看看你用的是unicode编码还是多字节集,unicode下边我没复现出来你说的问题,多字节没试。出现这种情况还有可能是编码转换。光四幅图好难判断

freelysuiyi avatar Oct 22 '20 18:10 freelysuiyi

项目使用的是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;

就不会出现乱码

haifenghuang avatar Oct 23 '20 00:10 haifenghuang