perogr Ответов: 2

Как написать файл (VB.NET) по-гречески ansi


Я читаю большой txt-файл с греческими символами (в Notepad++ говорится, что это кодировка ansi) и разбиваю его на более короткие txt-файлы.
Большинство файлов в кодировке ANSI, но некоторые файлы не ANSI. Это безумие, но это происходит каждый раз, когда я пытаюсь .

Что я уже пробовал:

код таков
objStreamReader = New StreamReader(fileName, System.Text.Encoding.GetEncoding(28597))
DobjStreamWriter = New StreamWriter(WDfilename, False, System.Text.Encoding.GetEncoding(28597))
strLine = objStreamReader.ReadLine
Do While Not Dstrline Is Nothing
     DWstrLine = strline
     DobjStreamWriter.WriteLine(DWstrLine)
     Dstrline = DobjStreamReader.ReadLine
 loop

(заявление
DobjStreamWriter.WriteLine(DWstrLine, System.Text.Encoding.GetEncoding(28597))
это тоже не работает)

Кодовая страница 28597 предназначена для iso-8859-7, я думаю, что это греческий ansi.

Пожалуйста, любой совет будет полезен.
Заранее спасибо

phil.o

Поскольку проблема заключается в вашем выход файлы, код, который вы должны показать нам, - это тот, который инициализирует и настраивает StreamWriter. Пожалуйста Улучшить ваш вопрос с соответствующим кодом-блоком.

perogr

Спасибо за ваш комментарий

Richard Deeming

strLine = objStreamReader.ReadLine
Do While Not Dstrline Is Nothing
     DWstrLine = strline

Для меня это не имеет никакого смысла. Вы не инициализируете переменную, которую используете для управления циклом, пока после вы проверили, так ли это. Nothing.

У вас также, кажется, есть два разных StreamReader переменные - objStreamReader, который вы используете для первого чтения, и DobjStreamReader который вы используете в цикле.

Я бы ожидал увидеть:
Dim fileEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(28597)
Using reader As New StreamReader(fileName, fileEncoding)
    Using writer As New StreamWriter(WDfilename, False, fileEncoding)
        Dim line As String = reader.ReadLine()
        Do While line IsNot Nothing
            writer.WriteLine(line)
            line = reader.ReadLine()
        Loop
    End Using
End Using

perogr

Большое вам спасибо.
Ключ-это инициализация.
Мой код очень сложен, и мне потребовалось много времени, чтобы попробовать ваше решение.
Я читаю много файлов для EDI , заголовочных файлов и файлов подробностей, и я пытаюсь разделить их на более короткие файлы.
Еще раз спасибо за вашу помощь

2 Ответов

Рейтинг:
2

Maciej Los

перогр[^] писанное:
Кодовая страница 28597 предназначена для iso-8859-7, я думаю, что это греческий ansi.


Нет. А ISO/IEC 8859-7 (Windows-28597)[^] используется для латыни/греческого языка. Один Windows-1253[^] кодовая страница используется для греческого языка-ANSI.

Вики писала:
Кодовая страница Windows 1253 ("греко - стандарт ANSI"), известный по зарегистрированные в IANA именем Windows-1253 или сокращенно cp1253 это страница для Windows код, используемый для записи новогреческий. Он не способен поддерживать древний политонный греческий язык.

Он не полностью совместим с ISO 8859-7, потому что несколько символов, включая букву Ά, расположены на разных значениях байтов:

(...)

Юникод предпочтителен для греческого языка в современных приложениях, особенно в качестве кодировки UTF-8 в Интернете.


Рейтинг:
13

Gerry Schmitz

Если вы просто "потоковая передача", вам не нужно беспокоиться о "кодировании".

"Текст" содержит греческий Юникод или нет.

Используйте правильный шрифт для диапазона кодов, и он будет отображаться правильно; в противном случае нет.

Вот и все.