2014-09-21 3 views
0

написать простую программу для извлечения всех почтовых адресов из большого текстового файла, имеющего проблему, поскольку некоторые из адресов используют non -стандартные символы.Convert = 00 форматированные коды UTF в текстовом файле с правильным символом utf в vb.net

Это некоторый исходный текст из файла мне нужно обработать:

Руа Вале-де-Louro, N = BA 97 Bloco 2, 1 = Б.А.

, но ей нужно прочитать:

Руа Вале-де-Louro, Nº 97 Bloco 2, 1º

Теперь, очевидно, я мог бы сделать простую замену для этого символов, но мне нужно работать с каждым символом.

BA - это шестнадцатеричное значение символа º в utf32 (хотя и с загрузкой нулей, предшествующих ему), поэтому, если я могу что-то закодировать, чтобы найти все эти экземпляры «= xx» в строке и заменить их правильным utf характер, который разрешил бы его. но для жизни я не могу понять, как это сделать.

Может ли кто-нибудь помочь?

Благодаря

+0

Верование в «обычный текст» ⇒ [Программирование совпадением] (https://pragprog.com/the-pragmatic-programmer/extracts/coincidence). –

+1

Здесь используются два кодировки. Первоначальный текст был, вероятно, с использованием кодовой страницы Windows 1252, а затем преобразован в кодируемый кадром кодировщик. Отправьте его обратно, вы не хотите этого. –

ответ

1

Использование

Dim txt As String = IO.File.ReadAllText("fileName", System.Text.Encoding.encoding) 'ASCII, UFT32, UFT8, Unicode etc... 

Изменить слово кодирование с соответствующим одним.

1

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

Dim input = "Rua Vale de Louro, N=BA 97 Bloco 2, 1=BA A" 
Dim expected = "Rua Vale de Louro, Nº 97 Bloco 2, 1º A" 

Dim regex = new Regex("=([0-9A-Fa-f]+)",RegexOptions.CultureInvariant, TimeSpan.FromSeconds(10))   
Dim evaluator = Function(match) Char.ConvertFromUtf32(Convert.ToInt32(match.Groups(1).Value, 16)) 

Dim actual = regex.Replace(input, evaluator) 

Образец соответствует =, за которым следует одна или несколько шестнадцатеричных цифр. Шестнадцатеричные цифры находятся в группе 1.

Оценщик принимает шестнадцатеричные цифры, преобразует их в целое число из базы 16, а затем преобразует в код кодировки Unicode.