什么代码格式显示正确的换行符?

时间:2014-08-21 17:40:17

标签: unicode utf-8 format ascii

我正在将一些Access表导出到txt文件,并且txt文件存在很多问题。其中一个问题是在txt文件本身中看不到换行符。如果我从记事本中将带换行符的行复制到Notepad ++中,它会分成两行。

所以我认为这可能是代码格式问题,但我无法找到合适的解决方案。我目前正在导出默认的西欧,但是我应该导出UTF,Unicode,ASCII或其他东西吗?

2 个答案:

答案 0 :(得分:1)

从MS Access(或一般的VB / VBA)导出时,请确保使用vbCrLf常量(回车符加换行符)进行换行。该常数对应于HEX值0D 0A。

在Windows中,将上述2个字符一起用作换行符是惯例,而在许多其他平台中,例如Unix / Linux / MacOS /等。通常只使用0A。

这带来了一个问题:标准的Windows文本文件查看器Notepad不能单独处理0A,也不会将这些符号视为换行符。但是,更高级的编辑器(如Notepad ++或UltraEdit)会正确显示这些文件。

答案 1 :(得分:0)

Microsoft Office应用程序(Excel,Access)中的CSV导出功能使用CR + LF终止数据行,并将数据值(多行字符串)中的换行符写入文件中。 (我认为只有CR被写入CSV文件,以便在Office 2007之前的Office旧版本中使用换行符。)

大多数文本编辑器检测那些没有CR的LF(分别是没有LF的CR)并在加载CSV文件时将它们转换为CR + LF,这导致在文本编辑器中查看CSV文件时假定的错误CSV行作为数据值的数量在包含换行符的数据值的数据行上不正确。

但是,根据维基百科关于Comma-separated values的文章中所述的CSV规范,CSV文件中双引号值内的换行符是正确的。

但大多数支持从CSV文件导入的应用程序不支持带双引号值的换行符的CSV文件,因此导入的某些数据值错误。此外,无法在数据值中包含换行符的CSV文件上执行正则表达式替换,因为分隔符的数量在所有行上都不是常量。

UltraEdit用于编辑仅具有LF(或CR)的CSV文件,用于数据值中的换行符和特殊配置设置。在高级 - 配置 - 文件处理 - DOS / Unix / Mac处理选项从不提示将文件转换为DOS格式如果文件不是DOS则提示转换格式,单击按钮,如果显示此提示,则必须选择仅识别DOS终止行(CR / LF)作为新行进行编辑必须启用。

用于数据结尾的CR + LF的CSV文件和数据值中仅用于换行符的LF(或CR)将加载UltraEdit中的那些设置,其中行数等于数据行的数量。并且CSV文件中没有回车的换行(分别是没有换行的回车)在带有小矩形的行中显示为字符,因为没有字体具有用于回车或换行的字形,因为它们是是没有宽度的空白字符。现在可以使用Perl正则表达式查找\r(?!\n)|\n(?<!\r)来查找数据值中的换行符,并将其替换为不同的空格字符或删除它们。

在导出时使用哪种字符编码(ASCII,ANSI,Unicode(UTF-16),UTF-8)取决于字符串值中可以存在哪些字符。如果字符串值也可以包含本地代码页中未包含的字符,则必须使用Unicode编码。