C# StringBuilder追加波斯数字
我试图将一些数字附加到字符串中,该字符串已经包含波斯字符,C# StringBuilder追加波斯数字,c#,.net,stringbuilder,C#,.net,Stringbuilder,我试图将一些数字附加到字符串中,该字符串已经包含波斯字符,StringBuilder总是将波斯数字附加到字符串中 StringBuilder sb = new StringBuilder(); sb.Append( other things ); sb.Append("', '"); sb.Append("1234234"); sb.Append("', "); 即使我在上面的代码中明确地使用了英语数字,我最终还是使用了波斯语数字。如何将英文数字附加到此
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
INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی ', 'اتاق چهار تخته', '234234
带有LTR符号:
INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی ', 'اتاق چهار تخته', '234234
INSERT INTO [db] (....) VALUES ('21211221', 111555, '2015/12/12', 'نام خانوادگی ', 'اتاق چهار تخته', '234234
这似乎不太可能。但是,无论您使用什么来渲染字符串,都可能会感到困惑。请发布一个简短但完整的程序来演示这个问题,并通过显示字符串中每个字符的UTF-16值来诊断字符串的真实内容(基本上将每个
char
转换为int
),您还没有说您在哪里观察波斯数字。您正在将其写入控制台吗?在调试器中看到它吗?在您用来查看数据库内容的任何工具中都可以看到它?(如果你能把这个例子减少到最低限度也会有帮助。我还强烈建议使用参数化SQL,而不是像这样动态地构建SQL,顺便说一句。)是的,这对我来说并不适用。作为一个旁注,您可能需要考虑在查询中使用参数,而不是直接将值放在SQL文本中。而且,由于您显然使用的是varchar
文本(而不是nvarchar
),因此我看不出.NET与数据库中的波斯数字有什么关系代码>紧跟在temp.Append之后("INSERT..
@Akbari Renderer对RTL和LTR顺序感到困惑。您可以通过指定它应该在波斯语字母后使用LTR顺序来帮助它。“U+200E”-它是Unicode从左到右的符号。但这不仅仅是一个渲染问题,这些数字会以这种方式保存在数据库中。@Akbari因为字段被重新排序,请比较两个字符使用参数化查询从一开始就不存在这样的问题。