C#: Как я могу прочитать такие символы, как 'éóú' и öäü в одном файле? - PullRequest
2 голосов
/ 29 апреля 2020

Я создаю языковую систему для моего проекта, в которой вы можете легко добавить {language}.json в lang-folder, и программа включает в себя язык.

На данный момент у меня есть немецкий и английский sh как json файлы с именами en-us.json и de-de.json соответственно. Когда я добавил тестовый файл с именем fr-fr.json для французского языка, я столкнулся с проблемой, когда при обычном Encoding.Default символы é ó ú показывались как é. Например, предложение «Le fichier Excel est créé automatiquement:» вместо этого выглядит как «Le fichier Excel est crééà © automatiquement:».

Когда я изменил кодировку на Encoding.UTF8, французский язык отображается правильно, но затем немецкие символы äöü были заменены на �. Таким образом, предложение «Wählen S ie d ie Excel» теперь читается как «W�hlen S ie d ie Excel».

Я пробовал это с for l oop:

var encoding = System.Text.Encoding.Default;

for (int i = 1; i <= 2; i++)
{
    switch (i)
    {
        case 1:
            encoding = System.Text.Encoding.UTF8;
            break;

        case 2:
            encoding = System.Text.Encoding.Unicode;
            break;

        default:
            encoding = System.Text.Encoding.Default;
            break;
    }

// Below I try to create an object of the JSON
…
}

Но это не решило мою проблему, поскольку for l oop предназначено для таких символов, как китайские логограммы, где JsonConvert имеет проблемы, если не в Unicode.

Я не хочу говорить «если язык французский, кодируйте в UTF8; если это китайский, используйте Unicode; et c». поскольку все языки могут быть необязательными и, следовательно, вам не нужно иметь fr-fr.json. Но если вы, например, создаете ru-ru.json, вам снова нужен Unicode.

Есть ли способ определения наилучшей кодировки для текста? И, во-вторых, есть ли кодировка, которая может дать мне и äöü, и éóúá…, поэтому мне не нужно вручную изменять ее для каждого неисправного языка?

1 Ответ

4 голосов
/ 29 апреля 2020

Проблема в том, что ваш текстовый редактор сохранил ваш fr-fr.json как UTF-8 и ваш de-de.json как Latin-1 (он же "Default" в вашей системе).

Решение - сохранить все ваши JSON файлы в формате UTF-8 (поскольку UTF-8 может кодировать все символы Юникода и стал новым стандартом де-факто для текстовых файлов) и всегда использовать UTF-8 при чтении файлов.

Как сохранить файл JSON как UTF-8? Это зависит от вашего текстового редактора. Например, в Блокноте есть раскрывающийся список «Кодировка» внизу окна «Сохранить как».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...