我通过 PHP 5.2 编程方式将数据导出到 .csv 测试文件中。
例如数据:Numéro 1
(请注意重音符号的e)。
数据是 utf-8
格式(没有前置 BOM)。
当我在 MS Excel 中打开此文件时,它显示为 Numéro 1
。
我能够在文本编辑器(UltraEdit)中打开并正确显示。 UE 报告该字符为 十进制 233
。
我该如何导出文本数据到 .csv 文件中,以便 MS Excel 能够正确呈现,最好不需要强制使用导入向导或非默认向导设置?
我通过 PHP 5.2 编程方式将数据导出到 .csv 测试文件中。
例如数据:Numéro 1
(请注意重音符号的e)。
数据是 utf-8
格式(没有前置 BOM)。
当我在 MS Excel 中打开此文件时,它显示为 Numéro 1
。
我能够在文本编辑器(UltraEdit)中打开并正确显示。 UE 报告该字符为 十进制 233
。
我该如何导出文本数据到 .csv 文件中,以便 MS Excel 能够正确呈现,最好不需要强制使用导入向导或非默认向导设置?
在Django中,将BOM写入输出CSV文件实际上对我起作用了:
def handlePersoonListExport(request):
# Retrieve a query_set
...
template = loader.get_template("export.csv")
context = Context({
'data': query_set,
})
response = HttpResponse()
response['Content-Disposition'] = 'attachment; filename=export.csv'
response['Content-Type'] = 'text/csv; charset=utf-8'
response.write("\xEF\xBB\xBF")
response.write(template.render(context))
return response
更多信息请参见http://crashcoursing.blogspot.com/2011/05/exporting-csv-with-special-characters.html,谢谢大家!
我只能在Excel 2007中以制表符分隔的小端UTF-16格式开始于正确的字节顺序标记下正确解析CSV。
Excel 2007 可以正确读取带有 BOM (EF BB BF) 编码的 UTF-8 csv 文件。
Excel 2003(以及可能更早版本)可以读取带有 BOM (FF FE) 的 UTF-16LE 文件,但是使用制表符而不是逗号或分号。
CSV格式在Excel中是以ASCII而不是Unicode实现的,因此会破坏变音符号。我们遇到了同样的问题,这就是我追踪官方CSV标准被定义为基于ASCII的原因。
Content-Type
为text/csv; charset=Windows-1252
并类似地设置响应流的字符编码来完成此操作。'\uFEFF' + myCsvString
,可以按预期工作。 - bobjones使用Ruby 1.8.7,我将每个字段编码为UTF-16并丢弃BOM(也许)。
以下代码摘自active_scaffold_export:
<%
require 'fastercsv'
fcsv_options = {
:row_sep => "\n",
:col_sep => params[:delimiter],
:force_quotes => @export_config.force_quotes,
:headers => @export_columns.collect { |column| format_export_column_header_name(column) }
}
data = FasterCSV.generate(fcsv_options) do |csv|
csv << fcsv_options[:headers] unless params[:skip_header] == 'true'
@records.each do |record|
csv << @export_columns.collect { |column|
# Convert to UTF-16 discarding the BOM, required for Excel (> 2003 ?)
Iconv.conv('UTF-16', 'UTF-8', get_export_column_value(record, column))[2..-1]
}
end
end
-%><%= data -%>
重要的一行是:
Iconv.conv('UTF-16', 'UTF-8', get_export_column_value(record, column))[2..-1]
请检查您生成文件时使用的编码,为了使Excel正确显示文件,您必须使用系统默认代码页。
您使用的是哪种语言?如果是 .Net,您只需要在生成文件时使用 Encoding.Default 即可。