Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StringBuilder追加波斯数字_C#_.net_Stringbuilder - Fatal编程技术网

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因为字段被重新排序,请比较两个字符使用参数化查询从一开始就不存在这样的问题。