将Nvarchar数据类型导出为CSV

时间:2017-11-17 00:39:18

标签: sql-server coldfusion export-to-csv coldfusion-10 nvarchar

我正在尝试将国际字符从查询导出到csv。输出到浏览器工作正常,使用CFSPREADSHEET写入Excel也是如此。

我有以下设置:

  • 数据源连接使用JDBC
  • 表字段为nvarchar

渲染文件如下:

<cfset filepath="c:/test.csv" />
<cfloop query="q">
  <cfset string = "" />
  <cfset string = listAppend(string, q.fieldname) />
  <cffile action="append" file="#filePath#" output="#string#" charset="windows-1252" />
</cfloop>
<cffile action="readbinary" file="#filePath#" variable="bin" charset="windows-1252"> 
<cffile action="delete" file="#filePath#" /> 
<cfheader name="Content-Disposition" value="attachment; filename=Output.csv" charset="windows-1252"> 
<cfcontent type="text/plain" reset="true" variable="#bin#" />

但是,某些字符无法正常转换。例如:

  • Jørgen表示为JÃrgen
  • Sälzler表现为Sälzler

更新 - 添加charset="windows-1252"确实解决了大多数不良转化,包括上述示例。以下仍然不转换

  • Krčobić展示了Kr?obi?
  • Mirosław显示Miro?aw
  • Bożek展示了Bo?ek

1 个答案:

答案 0 :(得分:0)

据说Excel has issues with UTF8 CSV files.一个建议是附加一个BOM来帮助它,但不同版本的结果是混合的。有关详细信息,请参阅完整主题。

... build file string ....
<cfset FileWrite(filePath, binaryDecode("EFBBBF", "hex"))>
<cfset FileAppend(filePath, string, "utf-8")>

<cfheader name="Content-Disposition" value="attachment; filename=Output.csv" charset="utf-8"> 
<cfcontent type="text/plain" reset="true" file="#filePath#" deleteFile="false" />