c# - StringBuilder 附加波斯数字

标签 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");

最后追加的应该是英文数字,​​其实不是。

最佳答案

正如@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

关于c# - StringBuilder 附加波斯数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31238710/

相关文章:

.net - 一台服务器可以有多个.Net框架吗?

Java StringBuilder 参数性能

c# - 使用 $Rev :$ SVN keyword in C# code?

c# - 是否可以在 beforeFeature Hook 中使用变量作为 Specflow 场景语句的一部分?

c# - 如何将数据从sql查询加载到datagridview?

.net - XAML 文件如何与 cs 文件关联?

javascript - 将 JavaScript 转换为 C# - 混淆

c# - 具有泛型类型参数的对象初始值设定项

java - 当方法同步时,我们可以使用 StringBuilder 而不是 StringBuffer 吗?

Java ArrayList StringBuilder追加