Проблема с кодировкой в ​​FileOpen и StringBuilder в i18n - PullRequest
0 голосов
/ 11 апреля 2011

когда я смотрю на свой файл, который я сохранил с помощью i18n, все нормально, например, в нем есть «Fíll Âll ülle ~», что я и хочу… но в коде, который я пытаюсь прочитать,контексты этого файла и возвращение его в виде строки - это что-то вроде этого:

        string sLine = String.Empty;
        StringBuilder sHTMLText = new StringBuilder();
        int nFileHandle = FileSystem.FreeFile();

        sHTMLText.Append(String.Empty);
        FileSystem.FileOpen(nFileHandle, sFileName, OpenMode.Input, OpenAccess.Default, OpenShare.Default, -1);

        while (!FileSystem.EOF(nFileHandle))
        {
            sLine = FileSystem.LineInput(nFileHandle);
            sHTMLText.Append(sLine);
        };
        FileSystem.FileClose(nFileHandle);
        return sHTMLText.ToString();

, но когда я отлаживаю его, он повреждает правильные переведенные вещи, такие как «Fïll Âll ülle ~», и манипулирует имитак что я думаю, что мой метод не делает это таким образом, который учитывает кодировку, как если бы я установил для своего компьютера региональные / языковые настройки на французский ... так как я могу исправить свой существующий код или написать что-то подобное, что также касается кодировки иLang установлен на моем компьютере?

Thsanks

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Если вы пытаетесь прочитать файл, который был сохранен в кодировке не-Unicode, то вы должны точно указать, какой была эта кодировка при открытии файла.

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        using (StreamReader reader = new StreamReader(@"C:\myfile.txt", Encoding.GetEncoding(1252)))
        {
            // read the file with the reader object.
        }

    }
}

После того, как вы укажете кодировку, файл будет автоматически переведен во внутренний формат строки (UTF-16 LE), когда он будет прочитан.Обратите внимание, что преобразование действительного файла в устаревшей кодировке символов в Unicode всегда будет успешным, без затруднений, если кодировка указана правильно.Сохранение файла в унаследованной кодировке более проблематично и требует, чтобы все исходные символы отображались в унаследованной кодировке, или для этого используется соответствующий резервный механизм.

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

1 голос
/ 11 апреля 2011

Посмотрите на http://msdn.microsoft.com/en-us/library/ms143456.aspx, используйте StreamReader с правильной кодировкой.

НТН

Mario

...