Streamwriter: польские символы пропускаются?

Я пытаюсь сделать небольшой инструмент, чтобы помочь некоторым ребятам конвертировать данные между установкой SAP и установкой Axapta.

Я получаю текстовый файл в западноевропейской (Windows) кодировке (1252). Они вставили некоторые специальные символы, чтобы заменить некоторые польские символы. Теперь моя задача заменить эти специальные символы правильными польскими символами.

FileStream objFile = new FileStream(FilePath, FileMode.Open, FileAccess.Read,FileShare.Read);
StreamReader objTemp = new StreamReader(objFile, Encoding.GetEncoding(1252));

FileStream objFile2 = new FileStream(FilePath + "_new", FileMode.OpenOrCreate,FileAccess.Write);
StreamWriter objTemp2 = new StreamWriter(objFile2, Encoding.GetEncoding(1252));

while ((strLineText = objTemp.ReadLine()) != null)
{
    for (int i = 0; i < strOuterArray.Length; i++)
    {
        string[] strInnerArray = strOuterArray[i].Split(new char[]{';'});
        strLineText = strLineText.Replace(strInnerArray[0], strInnerArray[1]);
    }

    objTemp2.WriteLine(strLineText);
}

objTemp.Close();
objTemp.Dispose();

objFile.Close();
objFile.Dispose();

objTemp2.Flush();
objTemp2.Close();

If I debug the application and set a breakpoint on the "objTemp2.WriteLine(strLineText);" line. Then I can se that the value inside the strLineText variable is perfect. The special char is replaced by the correct Polish character.

Если я потом открою записанный файл, я не смогу найти правильные польские символы. Я работаю с «ś» и «Ś», оба просто сохраняются как «s» и «S» в файле.

Я что-то упустил или пропустил что-то очень важное?


person Community    schedule 17.12.2009    source источник


Ответы (1)


Я думаю, проблема в том, что соответствующие польские символы не существуют в кодовой странице Windows-1252.

Можете ли вы подтвердить, находятся ли они в этой сетке?

Мое предложение состояло бы в том, чтобы открыть поток вывода (запись потока) с кодировкой UTF-8 или чем-то подобным, что будет поддерживать все нужные вам символы.

person Rob Levine    schedule 17.12.2009
comment
Спасибо за ответ Роб. Нет - символы не указаны на странице, на которую вы ссылаетесь. Я говорил им, что думаю, что они используют неправильную кодировку, но они не слушали. Теперь мне есть, что им дать, и тогда они сами увидят. Спасибо! - person ; 17.12.2009