Microsoft Excel mangles Diacritics in .csv files?

后端 未结 22 2016
粉色の甜心
粉色の甜心 2020-11-22 05:02

I am programmatically exporting data (using PHP 5.2) into a .csv test file.
Example data: Numéro 1 (note the accented e). The data is utf-8 (

22条回答
  •  执笔经年
    2020-11-22 05:34

    With Ruby 1.8.7 I encode every field to UTF-16 and discard BOM (maybe).

    The following code is extracted from 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 -%>
    

    The important line is:

    Iconv.conv('UTF-16', 'UTF-8', get_export_column_value(record, column))[2..-1]
    

提交回复
热议问题