Excel ColdFusion XLS“;“出口”;和字符编码
我正在使用HTML表格将数据从页面“导出”到Excel。该表在浏览器中看起来不错,但在Excel中,特殊字符(如撇号、商标符号等)的编码不正确。如果我在记事本中打开导出的文件并将其保存为ANSII编码,然后在Excel中打开它,一切看起来都很好 我尝试使用cfcontent、setencoding和cfpagedirective在ColdFusion中设置页面编码,但到目前为止没有成功。有什么建议吗 编辑:作为临时解决办法,可以通过将导出的文件保存到磁盘,在记事本中打开文件,然后再次保存来删除错误字符。这并不是解决这个问题的最好办法 至于奇怪的人物: ®变成® ™ 变成Excel ColdFusion XLS“;“出口”;和字符编码,excel,coldfusion,character-encoding,Excel,Coldfusion,Character Encoding,我正在使用HTML表格将数据从页面“导出”到Excel。该表在浏览器中看起来不错,但在Excel中,特殊字符(如撇号、商标符号等)的编码不正确。如果我在记事本中打开导出的文件并将其保存为ANSII编码,然后在Excel中打开它,一切看起来都很好 我尝试使用cfcontent、setencoding和cfpagedirective在ColdFusion中设置页面编码,但到目前为止没有成功。有什么建议吗 编辑:作为临时解决办法,可以通过将导出的文件保存到磁盘,在记事本中打开文件,然后再次保存来删除错
'变成€™ 不使用HTML表格导出,您是否可以不导出到CSV并在每个项目周围设置“,”,以便:
"value1","value2"
您可以使用Java stringbuffer并创建如下queryToCSV函数:
<cffunction name="queryToCSV" returntype="string" access="public" output="false">
<cfargument name="query" type="query" required="true">
<cfscript>
var csv = createobject( 'java', 'java.lang.StringBuffer');
var i = 1;
var j = 1;
var cols = "";
var headers = "";
var endOfLine = chr(13) & chr(10);
if (arraylen(arguments) gte 2) headers = arguments[2];
if (arraylen(arguments) gte 3) cols = arguments[3];
if (not len( trim( cols ) ) ) cols = query.columnlist;
if (not len( trim( headers ) ) ) headers = cols;
headers = listtoarray( headers );
cols = listtoarray( cols );
for (i = 1; i lte arraylen( headers ); i = i + 1)
csv.append( '"' & headers[i] & '",' );
csv.append( endOfLine );
for (i = 1; i lte query.recordcount; i= i + 1){
for (j = 1; j lte arraylen( cols ); j=j + 1){
if (isNumeric( query[cols[j]][i] ) )
csv.append( query[cols[j]][i] & ',' );
else
csv.append( '"' & query[cols[j]][i] & '",' );
}
csv.append( endOfLine );
}
return csv.toString();
</cfscript>
</cffunction>
var csv=createobject('java','java.lang.StringBuffer');
var i=1;
var j=1;
var cols=“”;
var=”;
var endOfLine=chr(13)和chr(10);
if(arraylen(arguments)gte 2)头=参数[2];
if(arraylen(arguments)gte 3)cols=参数[3];
if(不是len(trim(cols)))cols=query.columnlist;
如果(非len(修剪(页眉)),页眉=cols;
标题=listtoarray(标题);
cols=列表阵列(cols);
对于(i=1;i lte阵列(标头);i=i+1)
追加(“”&headers[i]&“”);
csv.append(endOfLine);
对于(i=1;i lte query.recordcount;i=i+1){
对于(j=1;j lte arraylen(cols);j=j+1){
if(isNumeric(查询[cols[j]][i]))
追加(查询[cols[j][i]&',');
其他的
追加(“”&query[cols[j]][i]&“”);
}
csv.append(endOfLine);
}
返回csv.toString();
您是否在CFFile
中尝试了charset=“utf-8”
?如果仍然不起作用,请尝试charset=“windows-1252”
仅供参考:CF9可以通过导出到.xle(不仅仅是csv,真正的excel文件!)这是一个与编程相关的问题吗 至少,你可以像程序员一样制作并提供一些调试信息。忘记撇号,这里有几个不同的字符,你可以用它来表示;在Excel中,商标符号应该是什么样子的:你会显示0、1或2个字符吗?如果不是零,是什么字符是否显示?是否可以在公式中使用CODE()函数来告诉我们所看到的字符的内部代码 更新感谢您提供有关屏幕上实际出现的有趣字符的信息。基于此,以及您如何使用记事本解决此问题,保存的页面似乎已用UTF-8编码,但Excel将其显示为“ANSI”编码“代码页,例如使用西欧语言的地方的cp1252
接下来的问题:如何创建HTML表?在HTML的开头应该有类似于
charset=UTF-8
——您看到了什么?HTML文件是否以.htm、.HTML或其他扩展名保存?如何将其导入Excel?哪个Excel:2007、2003、其他?您考虑过使用XML创建speadsheet吗?当您有10000多条记录时,它会使文件有点臃肿,并且似乎有一些问题。但是,对于中小型数据集,它工作得非常好,并提供了我相信您正在寻找的格式化功能
首先,您要导出到哪个版本的Excel?任何低于2007年(或者可能是2003年)的版本都会对默认字符集(我相信是cp1252,但我不是100%确定)以外的任何东西进行糟糕的处理 正如其他人所建议的,您可能在cfcontent中使用了错误的字符集-请尝试以下操作:
<cfcontent type="application/vnd.ms-excel; charset=windows-1252">
如果该字符集不正确,您可以尝试其他字符集,例如iso-8859-1或us ascii。有关完整列表,请参阅
此外,您可能希望在生成excel文件时签出cfreport。我遇到了同样的问题,excel电子表格中出现了奇怪的字符“they”,而它不在我的HTML页面中
简单地将cfcontent改为:
,虽然我当然可以,但这似乎对最终结果没有任何帮助。也就是说,特殊字符仍然不能正确显示。不确定它是否有效,但是,使用charsetEncode()是否有帮助?在发送之前,我并不是真的将其写入文件,但我会尝试一下,看看会出现什么。我不认为charset有元标记。我会试试看是否有效。现在,HTML表只是在ColdFusion中以普通HTML的形式生成,然后发送给:。office正在使用Excel 2007查看它。添加了meta标记,现在似乎所有内容都显示正确。谢谢你的帮助。“至少你可以像一个程序员一样……”因为某人没有提供足够的信息而恐吓他们是完全没有必要和没有帮助的。如果你想要的是调试信息,只需询问一下。更改HTTP头中的字符集不起作用。然而,添加meta标记确实起到了作用。