转换TStringList中的特殊字符

时间:2014-12-15 14:09:02

标签: delphi delphi-7

我正在使用Delphi 7并且有一个例程,它带有一系列记录的csv文件并导入它们。这是通过使用MyStringList.LoadFromFile(csvfile)将其加载到TStringList中,然后使用line = MyStringList [i]获取每一行来完成的。

这一直很好但我现在发现特殊字符没有正确拾取。例如,RueFrançoisCoppée就像RueFrançoisCoppée一样出现 - 带有重音的法国人物就是问题。

有一种简单的方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您的文件编码为UTF-8。例如,考虑ç。正如您从链接中看到的,它以UTF-8编码为0xC3 0xA7。在Windows-1252中,0xC3编码Ã和0xA7编码§

使用ANSI Delphi是否可以轻松处理此问题取决于运行程序的主要代码页。

  • 如果您使用的是Windows 1252,那么您会没事的。您只需要通过调用UTF8Decode来解码UTF-8编码的文本。
  • 如果您使用的是其他语言环境,那么生活就会变得更加困难。这些字符可能不存在于您的语言环境的字符集中,在这种情况下,您无法在使用当前ANSI字符集编码的Delphi string变量中表示它们。如果是这种情况,那么您需要使用Unicode。

如果您关心处理国际文本,则需要:

  • 升级到具有Unicode支持的现代Delphi,或
  • 坚持使用Delphi 7并使用WideString和TNT Unicode组件。

答案 1 :(得分:1)

可能它不是UTF8编码。尝试转换它:

Text := UTF8Encode(Text);

问候,