目录

Omnis逗号分隔符及编码

目录

Omnis逗号分隔符及编码

  1. $clib.$prefs.$userexportdelimiter

    • 只要显式设置$userexportdelimiter就不用担心在Omnis其它地方改写此设定值,需要担心的是Export和Import时不指定delimiter而依赖默认值的。
    • 只要不使用Export data,而是用Transmit text to print file并在其中显式使用分隔符,则无需担心此值。
  2. UTF-8和BOM(UTF-16LE自带BOM,但Excel无法识别)

    • 如果csv文件没有BOM,则Excel默认使用GBK编码读取csv,会导致中文乱码。保险的方法是指定使用UTF-8编码及UTF-8的BOM,显式告诉Excel CSV的编码格式。
    • 如果文件开始使用了sep=;则BOM会失效,中文仍然会是乱码。
    • 要想使用;分隔并支持中文,只能将系统的分隔符设置为;同时使用UTF-8 + BOM并在csv中使用;。
  3. 是否需要转换为xlsx

    • 如果只是本机读写,使用$userexportdelimiter导出csv问题不大。
    • 如果需要发送给别人,则最好转化为xlsx,以免不同机器的分隔符不一致导致格式错乱乱码
  4. 小结

    • 导出列表一律使用c_SNF/GenerateCsvFromList(无需指定分隔符,会使用系统设置的分隔符),优先导出为xlsx以消除不同系统的分隔符设置的影响
    • 导出非列表数据优先使用逗号分隔符(开头不能加sep=,),且使用UTF-8 + BOM
    • 历史代码中已经使用分号的要去掉开头的sep=;并使用UTF-8 + BOM,然后用o_Excel.$convertCSV来转换为xlsx(参数指定分隔符为;)
    • 实在不想修改分隔符又没有中文需求,则要保留开头的sep=;(使用UTF-8 + BOM也一样有乱码,且系统的分隔符不受控)
    • 导入时需要指定分隔符和编码格式,但无需指定BOM,因为Omnis始终会按有BOM导入(UTF-16LE自带BOM,Omnis可以识别)