StringBuilder附加波斯数字

Akb*_*ari 4 .net c# stringbuilder

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

    StringBuilder sb = new StringBuilder();
    sb.Append( other things );
    sb.Append("', '");
    sb.Append("1234234");
    sb.Append("', ");
Run Code Online (Sandbox Code Playgroud)

即使我在上面的代码中明确使用英文数字,​​我仍然最终得到波斯数字.如何将英文数字附加到此字符串?

UPDATE

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

     StringBuilder temp = new StringBuilder();
                    temp.Append("INSERT INTO [db] (....) VALUES ('21211221', 111555, 
                                '2015/12/12', '??? ????????  ', '???? ???? ????");
                temp.Append("', '");
                temp.Append("234234");
Run Code Online (Sandbox Code Playgroud)

最后一个附加应该是英文编号,但事实并非如此.

Ulu*_*rov 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");
Run Code Online (Sandbox Code Playgroud)

没有LTR符号:

INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', '??? ???????? ', '???? ???? ????', '234234
Run Code Online (Sandbox Code Playgroud)

带LTR符号:

INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', '??? ???????? ', '???? ???? ?????', '234234
Run Code Online (Sandbox Code Playgroud)

  • @Akbari因为字段已重新排序,请在编辑中比较两个输出.最好使用参数化查询从一开始就没有这样的问题. (6认同)