我有一个固定宽度的文件,我已根据起始字符和每个字段的长度映射了列。
它一直运行良好,直到我遇到
€
符号并注意到提供给我们的文件已配置,例如起始字符和长度以字节为单位定义。
这意味着,由于
€
符号是在三个字节上编码的,因此具有单个 €
的字段将显得短 2 个字符。
一个简单且不完整的解决方法是逐行解析文件,将
€
替换为 €
。这可能需要稍后处理更多字符(例如£
)。它们不太可能有很多,但由于这个领域不受限制,所以很有可能有一天会出现不受欢迎的失败。
有更好的方法吗?
using (var readFile = new StreamReader(path))
{
var line = readFile.ReadLine();
while ((line = readFile.ReadLine()) != null)
{
line = line.Replace("€", "€ ");
///Mycode...
var obj = new T();
obj.AssignObjectValuesFromFixedWidthLine(line);
...
///
}
}
我使用我支持的平面文件解析工具也遇到了同样的问题。为了解决这个问题,我所做的就是读取 ISO-8859-1 中的文件,无论实际的代码页如何,执行解析,然后将其转换回实际的原始代码页,然后再将其写回到输出流。