Отображение - в приложении на C # .NET - PullRequest
1 голос
/ 10 января 2009

У меня проблема с локализацией.

Один из моих трудолюбивых сотрудников заменил все строки в нашем приложении константами, которые содержатся в словаре. В этот словарь помещаются различные строки, когда пользователь выбирает язык (по умолчанию английский, но целевыми языками являются немецкий, испанский, французский, португальский, мандаринский и тайский).

Для нашего тестирования этой функциональности мы хотели изменить кнопку, включив в нее текст, имеющий символ «-», который отображается как на испанском, так и на шрифте Arial Unicode MS (который мы используем в приложении).

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

Так где же сбой? Я думаю, что это может быть в нескольких местах:

1) Блокнот может не поддерживать Unicode, поэтому отображаемое здесь - не то, что ожидает vs2008, и поэтому программа интерпретирует символ как квадрат (РЕДАКТИРОВАТЬ: блокнот показывает те же символы, что и vs, т. Е. Они оба показывают н. в одном и том же месте.).

2) vs2008 не может справиться с. Мне очень, очень трудно в это поверить.

3) Текст читается правильно, но шрифт по умолчанию для vs2008 не может его отобразить, поэтому отладчик показывает квадрат.

4) Текст не читается должным образом, и я должен использовать что-то кроме обычного StreamReader для получения строк.

5) Текст читается правильно, но класс String по умолчанию в C # не обрабатывает - хорошо. Мне очень, очень трудно в это поверить.

6) Версии Arial Unicode MS у меня нет - несмотря на то, что она указана как один из символов 50k к http://www.fileinfo.info.

Что-нибудь еще, что я мог бы пропустить?

Спасибо за любую помощь!

Ответы [ 7 ]

3 голосов
/ 10 января 2009

Я бы сказал, что, безусловно, виноват Блокнот. Блокнот плохо работает с символами Юникода. Если вы хотите вручную отредактировать этот файл, используйте что-то вроде Notepad ++ , который может обрабатывать Unicode, и убедитесь, что вы сохранили файл как UTF-8. Вероятно, вы можете просто использовать VS для редактирования файла и просто забыть о блокноте или Notepad ++ полностью. .Net и Visual studio очень хорошо справляются с акцентными символами. Все строки по умолчанию имеют формат UTF-8, поэтому проблема почти наверняка связана с Блокнотом.

1 голос
/ 10 января 2009

У меня очень короткое руководство по устранению неполадок Unicode . Он предназначен для извлечения текста из баз данных, но в целом применяются те же принципы.

Самая важная отправная точка IMO - это знать, что на самом деле находится в вашей строке, когда она просто показывает прямоугольник. Выведите содержимое на консоль с помощью кода, подобного следующему:

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write ("{0:x4} ", (int)c);
    }
    Console.WriteLine();
}    

Затем найдите символ в кодовых диаграммах на unicode.org . Я подозреваю, что вы хотите U + 00F1, но может быть другой похожий символ с другой кодовой точкой - я был одурачен этим раньше.

1 голос
/ 10 января 2009

Как вы читаете строки?

Вы пытались прочитать текстовый файл следующим образом (с кодировкой UTF8):

using(StreamReader sr = new StreamReader(File.Open("file.txt", FileMode.Open), Encoding.UTF8))
{
// add your string to dictionary
}
0 голосов
/ 01 июня 2010

Чтобы правильно прочитать испанские символы (ñ, á, é и т. Д.), Вы можете попробовать кодовую страницу 1252 для кодировки.

0 голосов
/ 10 января 2009

Вы проверили, что ваша исходная кодировка файла действительно utf-8? Может быть неприменимо к установке по умолчанию vs2008, но IDE может определить язык вашей операционной системы по умолчанию (или кодировку файловой системы) и установить подходящую кодировку не-utf-8 для всех ваших файлов. Возможно, вы захотите попробовать с беспорядочно закодированным беспорядком (с которым вы часто сталкиваетесь в сети) «ñ», не изменяя ничего в настройках, чтобы проверить несоответствия кодировки.

Я укусил этой вещью, когда приступил к работе над кодом "бог знает, что редактирует в каком коде" коллеги.

Я совершенно уверен, и я предполагаю, что все ваши вызовы API-интерфейса поддерживают utf-8, поэтому весь ваш текст интерпретируется как utf-8, даже если это не так.

0 голосов
/ 10 января 2009

Вы пытались использовать String.Format при назначении свойства button.Text и предоставлении правильного IFormatProvider с испанским объектом CultureInfo?

Я не знаю, будет ли это иметь эффект, но может помочь.

0 голосов
/ 10 января 2009

У меня была похожая проблема только на днях - см. Unicode-символы, не отображаемые в System.Windows.Forms.TextBox Мне удалось исправить, изменив TextBox на RichTextBox.

...