【发布时间】:2018-08-28 02:17:49
【问题描述】:
我有一个使用 DevExpress 控件(包括报告)构建的网站。使用的主要语言是希伯来语,所以基本方向是 RTL。然而,通常需要在希伯来语文本中包含英文文本 LTR。他们的 Web 控件支持 RTL,通常混合文本没有问题。
问题在于他们的报告直到最近才支持 RTL。完全用希伯来语创建报告并不是什么大问题。当我们将希伯来语和英语混合在一起时,麻烦就开始了,然后文本就变得混乱了。
我使用以下代码成功解决了这个问题:
private string FixBiDirectionalString(string textToFix)
{
try
{
char RLE = '\u202B';
char PDF = '\u202C';
char LRM = '\u200E';
char RLM = '\u200F';
StringBuilder sb = new StringBuilder(textToFix.Replace("\r", "").Replace("\n", string.Format("{0}", '\u000A')));
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("[A-Za-z0-9-+ ]+");
System.Text.RegularExpressions.MatchCollection mc = r.Matches(sb.ToString());
foreach (System.Text.RegularExpressions.Match m in mc)
{
double tmp;
if (m.Value == " ")
continue;
if (double.TryParse(RemoveAcceptedChars(m.Value), out tmp))
continue;
sb.Replace(m.Value, LRM + m.Value + RLM);
}
return RLE + sb.ToString() + PDF;
}
catch { return Text; }
}
private string RemoveAcceptedChars(string p)
{
return p.Replace("+", "").Replace("-", "").Replace("*", "").Replace("/", "");
}
此代码基于我在本文XtraReports RTL: bidirectional text drawing 在其中一个 cmets 中找到的代码。
但是我仍然遇到希伯来语和英语单词之间的空格消失或放错位置的问题。
如何解决? (我仍在使用不支持 RTL 的旧版报表)。
【问题讨论】:
标签: c# unicode devexpress bidi