将CJK字符粘贴到RichTextBox会添加不需要的第二种字体

时间:2012-04-12 05:55:23

标签: c# unicode fonts richtextbox cjk

如果将下面的内容粘贴到RichTextBox中,那么CJK字符和之后的所有内容都会变成第二种字体--SimSun。

  

插入CJK字符:色

     

...进行此字体更改。

这会以不受欢迎的方式影响RichTextBox的格式,并且还会大幅减慢大型复制/粘贴的速度。

我尝试将RichTextBox设置为使用unicode字体,例如“Lucida Sans Unicode”,并确保我从(Wordpad)复制的源也使用“Lucida Sans Unicode”字体。然而,在一天结束时,当我粘贴到RichTextBox时,它强制使用另一种字体,如SimSun(或其他字体,如“Shonar Bangla”或“Microsoft Himalaya”,如果我们使用其他类型的字符)。 / p>

由于“Lucida Sans Unicode”拥有它们,为什么它不能坚持使用一种字体?

我注意到其他人也有类似的问题: RichTextBox - retain original formatting (font), even after paste

不幸的是,该页面上的解决方案对我不起作用,因为我仍然发现RTB在CJK字符后面使用了另一种字体。

3 个答案:

答案 0 :(得分:7)

我一直在打开和关闭这个问题。

今天在互联网上到处翻转后,我注意到msdn上的某些内容并试了一下。将此行添加到Form1_Load()InitializeComponent()行之后的表单构造函数:

richTextBox1.LanguageOption = RichTextBoxLanguageOptions.DualFont;

我不是专家,我不能告诉你为什么它有效,但它对我有用!

答案 1 :(得分:2)

不幸的是,尽管名称略显混乱,但Lucida Sans Unicode并不包含CJK字符(正如您对其名称中带有 Unicode 的字体所期望的那样)。这会触发一些字体回退机制,从而产生包含所需符号的字体。我看到的唯一可能的解决方案是使用实际包含所有必需字符的字体。

答案 2 :(得分:0)

为了补充Petr的答案(并且部分地使用他的评论中的信息),事实证明许多Unicode符号在RichTextBox中渲染得慢得多。

但是通过从大约1280(0x500)和更大的位置过滤掉unicode字符,我发现粘贴的速度和以前一样快。