2015-07-06 2 views
4

Я пытаюсь добавить некоторые числа в строку, эта строка уже содержит персидский символ, а StringBuilder всегда добавляет персидское число в строку.StringBuilder добавляет персидские цифры

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

Даже если я явно использую английские номера, подобные приведенным выше, я все равно получаю персидские числа. Как добавить английские номера в эту строку?

UPDATE

Эти линии имитировать мою проблему, вы можете увидеть персидскую номер прослеживая этот код:

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

Последний Append должен быть английский номер, но это не так.

+4

Это кажется маловероятным. Возможно, что все, что вы используете для * рендеринга *, строка все равно запутывается. Пожалуйста, разместите короткую, но полную программу, демонстрирующую проблему, - и диагностируйте * реальное * содержимое строки, показывая значение UTF-16 каждого символа в нем (в основном отбрасывайте каждый символ '' '' '' '' ') –

+0

Вы должны опубликовать демонстрируя проблему. Эта короткая, но полная программа не должна вообще ударять по базе данных. Это также не совсем понятно, где вы видите проблему ... –

+2

Вы все еще не сказали, где вы наблюдаете персидское число. Вы пишете его в консоли? Видя это в отладчике? Видя это в любом инструменте, который вы используете для просмотра содержимого вашей базы данных? (Это также помогло бы, если бы вы сократили этот пример до минимума медведя. Я также ** настоятельно рекомендую использовать параметризованный SQL, а не строить SQL динамически, как это, кстати.) –

ответ

7

Как сказал Джон-Скит, это проблема рендеринга. Механизм визуализации текстовых файлов 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 
+0

Но это была не просто проблема с рендерингом, эти номера были бы сохранены в базе данных таким образом. – Akbari

+6

@Akbari Поскольку поля были переупорядочены, сравните два выхода в редакторе. Лучше использовать параметризованный запрос, чтобы не иметь такой проблемы с самого начала. –

Смежные вопросы