2014-09-21 48 views
0

编写一个简单的程序,从大的纯文本文件中提取所有邮政地址,由于某些地址使用非问题 - 标准字符。将纯文本文件中的UTF格式转换为vb.net中正确的UTF字符

这是从文件中的一些源文本我需要处理:

水坑谷德Louro,N = BA 97 Bloco 2,1 = BA甲

但它需要读取:

街谷德Louro,Nº97 Bloco 2,1º一个

现在很显然,我可以做一个简单的替换为这一个字,但我需要它与每个字符的工作。

BA是utf32中符号的十六进制值(虽然前面有一个零加载),所以如果我可以编写代码在字符串中找到所有这些“= xx”实例并将其替换为正确的utf字符,将解决它。但对于我的生活,我无法弄清楚如何。

任何人都可以帮忙吗?

感谢

+0

相信“纯文本”⇒[巧合编程](https://pragprog.com/the-pragmatic-programmer/extracts/coincidence)。 – 2014-09-21 16:30:17

+1

这里使用了两种编码。原始文本可能使用Windows 1252代码页,然后通过带引号的可打印编码器进行转换。发回它,你不需要它。 – 2014-09-21 16:46:04

回答

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代码点。