StringBuilder附加波斯数字

时间:2015-07-06 06:05:29

标签: c# .net stringbuilder

我正在尝试将一些数字附加到字符串中,该字符串已包含波斯语字符,StringBuilder始终将波斯语数字附加到字符串中。

    StringBuilder sb = new StringBuilder();
    sb.Append( other things );
    sb.Append("', '");
    sb.Append("1234234");
    sb.Append("', ");

即使我明确使用上述代码中的英文数字,​​我仍然会使用波斯语数字。如何将英文数字附加到此字符串?

更新

这些线模拟了我的问题,您可以通过跟踪此代码来查看波斯语编号:

     StringBuilder temp = new StringBuilder();
                    temp.Append("INSERT INTO [db] (....) VALUES ('21211221', 111555, 
                                '2015/12/12', 'نام خانوادگی  ', 'اتاق چهار تخته");
                temp.Append("', '");
                temp.Append("234234");

最后一个附加名应该是英文编号,但不是。

1 个答案:

答案 0 :(得分:7)

正如@ Jon-Skeet所说,这是渲染器的问题。获取波斯字符后,Windows文本呈现引擎会变得混乱,并继续以RTL顺序追加文本。因此,我们需要帮助渲染器以LTR顺序正确渲染附加文本。为此我们可以添加Unicode从左到右的符号' U + 200E'波斯文后。

StringBuilder temp = new StringBuilder();
temp.Append("INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی  ', 'اتاق چهار تخته");
temp.Append('\x200E');
temp.Append("', '");
temp.Append("234234");

没有LTR符号:

INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی ', 'اتاق چهار تخته', '234234

使用LTR符号:

INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی ', 'اتاق چهار تخته‎', '234234