Написание текстового файла из VB.NET (кодировка) - PullRequest
0 голосов
/ 21 августа 2009

Я пишу приложение, которое должно создать простой текстовый файл со столбцами фиксированного размера.

Мой текущий код:

Dim MyFilePath As String = Path & FILE_PREFIX & FileNr & ".TXT"

IO.File.Delete(MyFilePath)

Dim FileStr As New IO.StreamWriter(MyFilePath, False, <ENCODER HERE>)
Do While r.Read
    FileStr.WriteLine(r("TXTLine"))
Loop
FileStr.Close()
r.Close()

Моя проблема в том, что у меня есть некоторые специальные символы, такие как: «ñ», «à» и т. Д., И я не могу найти правильную кодировку.

  • Если я использую значение по умолчанию, то оно заменяет «-» с двумя символами.
  • Если я использую ASCII, тогда все специальные символы заканчиваются как: "?"
  • Если я использую UTF-8 , тогда весь текст в порядке, но он добавляет "ÿ" в первом байте файл.

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

Что я мог сделать?

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Как вы проверяете, что получили правильную кодировку?

Если вы просто открываете файл в Блокнот , Windows-1252 , вероятно, вам нужна кодировка.

Encoding.GetEncoding("Windows-1252")

даст вам это.

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

0 голосов
/ 21 августа 2009

Проблема не в том, что вы не можете найти правильную кодировку, проблема в том, что вы не знаете, что такое ваша кодировка SOURCE. Обычный ASCII на самом деле имеет только 256 символов, и если ваш источник содержит акцентированные символы, которых нет в палитре ASCII, вы не сможете написать их в кодировке ASCII. Конец истории.

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

Нельзя поместить квадратный колышек (символы с акцентом Юникода) в круглое отверстие (файл ASCII).

0 голосов
/ 21 августа 2009

Подождите, вы говорите, что столбцы должны быть "фиксированной длины". Это говорит о том, что вы пытаетесь прочитать этот файл другим приложением - уверены ли вы, что второе приложение может читать «специальные» ( Unicode ) символы?

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

...