我有一个Excel文件,其中包含一些西班牙语字符(波浪号等),我需要将其转换为CSV文件以用作导入文件.但是,当我另存为CSV时,它会破坏非特殊的西班牙语字符,而不是ASCII字符.它似乎也是用左右引号和长短划线来做的,它们似乎来自原始用户在Mac中创建Excel文件.
由于CSV只是一个文本文件,我确信它可以处理UTF8编码,所以我猜它是一个Excel限制,但我正在寻找一种从Excel到CSV并保留非ASCII字符的方法完整.
我正在开发一个应用程序的一部分,负责将一些数据导出到CSV文件中.该应用程序始终使用UTF-8,因为它在各个层面都具有多语言特性.但是在Excel中打开这样的CSV文件(包含例如变音符号,西里尔字母,希腊字母)并没有达到预期的结果?„/?¤, ?–/?¶
.而且我不知道如何强制Excel理解打开的CSV文件是用UTF-8编码的.我也尝试过指定UTF-8 BOM EF BB BF
,但Excel忽略了这一点.
有没有解决方法?
PS哪些工具可能像Excel一样?
UPDATE
我不得不说,我把社区与问题的表述混为一谈.当我提出这个问题的时候,我想要一种在Excel中打开UTF-8 CSV文件的方法,而不会给用户带来任何问题,而且流畅透明.但是,我使用了错误的配方要求自动执行此操作.这非常令人困惑,它与VBA宏自动化发生冲突.这个问题有两个我最欣赏的答案:Alex /sf/answers/420163691/的第一个答案,我接受了这个答案; 第二个是由Mark /sf/answers/454164931/稍后出现的.从可用性的角度来看,Excel似乎缺乏良好的用户友好型UTF-8 CSV支持,因此我认为这两个答案都是正确的,我首先接受了Alex的答案,因为它确实表明Excel无法做到这是透明的.这就是我在这里自动混淆的.Mark的答案为更高级的用户提供了一种更复杂的方式来实现预期的结果.这两个答案都很棒,但亚历克斯的答案更符合我未明确指出的问题.
更新2
五个月后,在最后一次编辑之后,我注意到Alex的答案因某种原因消失了.我真的希望这不是一个技术问题,我希望现在不再讨论哪个答案更大.所以我接受马克的答案是最好的答案.
我有一个非常简单的事情,只输出一些CSV格式的东西,但它必须是UTF-8.我在TextEdit或TextMate或Dreamweaver中打开这个文件,它正确地显示了UTF-8字符,但是如果我在Excel中打开它,它就是这样做的傻事.这是我在文档的头部所得到的:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Run Code Online (Sandbox Code Playgroud)
除了Excel(Mac,2008)不想正确导入它之外,这一切似乎都具有预期的效果.Excel中没有选项可以"以UTF-8打开"或其他任何东西,所以......我有点恼火.
尽管有很多人遇到同样的问题,我似乎无法在任何地方找到任何明确的解决方案.我最看重的是包含BOM,但我无法弄清楚如何做到这一点.正如你在上面看到的那样,我只是提供echo
这些数据,我不会写任何文件.如果我需要,我可以这样做,我不是因为此时似乎不需要它.有帮助吗?
更新:我尝试回显echo pack("CCC", 0xef, 0xbb, 0xbf);
我刚刚从试图检测BOM的网站上提取的BOM.但Excel只会在导入时将这三个字符附加到第一个单元格,并且仍会混淆特殊字符.
我们有一个Web应用程序,可以导出包含UTF-8的外来字符的CSV文件,没有BOM.Windows和Mac用户都在Excel中获得垃圾字符.我尝试用BOM转换为UTF-8; Excel/Win很好用,Excel/Mac显示乱码.我正在使用Excel 2003/Win,Excel 2011/Mac.这是我尝试过的所有编码:
Encoding BOM Win Mac
-------- --- ---------------------------- ------------
utf-8 -- scrambled scrambled
utf-8 BOM WORKS scrambled
utf-16 -- file not recognized file not recognized
utf-16 BOM file not recognized Chinese gibberish
utf-16LE -- file not recognized file not recognized
utf-16LE BOM characters OK, same as Win
row data all in first field
Run Code Online (Sandbox Code Playgroud)
最好的是具有BOM的UTF-16LE,但CSV不被识别.字段分隔符是逗号,但分号不会改变.
是否有任何编码在两个世界都有效?
我有一个表格数据,我需要导出到csv而不使用任何外部插件或API.我使用了window.open
传递mime类型的方法但面临如下问题:
如何使用jquery确定系统上是否安装了Microsoft Excel或Open Office
代码应该独立于系统上安装的内容,即openoffice或ms excel.我相信CSV是可以预期在两个编辑器中显示的格式.
码
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/JavaScript">
$(document).ready(function(){
$("#btnExport").click(function(e) {
var msg = GetMimeTypes();
//OpenOffice
window.open('data:application/vnd.oasis.opendocument.spreadsheet,' + $('#dvData').html());
//MS-Excel
window.open('data:application/vnd.ms-excel,' + $('#dvData').html());
//CSV
window.open('data:application/csv,charset=utf-8,' + $('#dvData').html());
e.preventDefault();
});
});
function GetMimeTypes () {
var message = "";
// Internet Explorer supports the mimeTypes collection, but it is always empty
if (navigator.mimeTypes && navigator.mimeTypes.length > 0) {
var mimes = navigator.mimeTypes;
for (var i=0; i < mimes.length; i++) {
message += "<b>" + …
Run Code Online (Sandbox Code Playgroud) 我需要将javascript数组导出到excel文件并下载它我在这段代码中执行它.data是一个javascript对象数组.
var csvContent = "data:text/csv;charset=utf-8,";
data.forEach(function(dataMember, index)
{
dataString = dataMember.join(",");
csvContent += index < data.length ? dataString+ "\n" : dataString;
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "upload_data" + (new Date()).getTime() + ".csv");
link.click();
Run Code Online (Sandbox Code Playgroud)
所有这些东西都可以正常工作,直到我的字符串属性具有非英语字符,如西班牙语,阿拉伯语或希伯来语.如何使用所有这些非ASCII值进行导出?
资源被解释为文档但使用MIME类型text/css传输
这是Google Chrome Inspector中显示的错误.
该文件是:http://www.doanddare.org/css/style.css
它由php处理器呈现.
我该如何解决这个错误?
返回的标头是:
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Cache-Control:max-age=0
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3
Run Code Online (Sandbox Code Playgroud)
HTTP/1.1 200 OK
Date: Sun, 10 Oct 2010 07:35:04 GMT
Server: Apache
content-style-type: text/css
Expires: Thu, 10 Oct 2030 03:50:23 GMT
Cache-Control: max-age=631138519, public
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/css
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)
是否可以将请求标头作为文档发送,并将响应标头作为css文件返回?
如果是这样,我应该如何控制请求标头?
谢谢你的帮助.
我正在使用此代码通过OpenCSV将波斯语单词添加到csv文件中:
String[] entries="\u0645 \u062E\u062F\u0627".split("#");
try{
CSVWriter writer=new CSVWriter(new OutputStreamWriter(new FileOutputStream("C:\\test.csv"), "UTF-8"));
writer.writeNext(entries);
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
当我打开生成的csv文件时,在Excel中,它包含"ứỶờịỆ".其他程序,如notepad.exe没有此问题,但我的所有用户都使用MS Excel.
用SuperCSV替换OpenCSV并不能解决这个问题.
当我手动将波斯字符键入csv文件时,我没有任何问题.
我遇到过这样的问题,即Excel不能与UTF-8编码的CSV文件一起使用.请参阅Stack Overflow上的相关问题.
我遵循导出为UTF-16的解决方案,但似乎使用UTF-16,逗号字符不能作为分隔符,只有制表符.
但是,我找不到任何正确的文件名和mime类型应该是制表符分隔文件.我找到了某个地方,说它是application/vnd.ms-excel和xls.这适用于Excel 2003但2007不批准.
那应该是什么?
我有一个Java存储过程,它使用Resultset对象从表中获取记录并创建一个csv文件.
BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
retBLOB.open(BLOB.MODE_READWRITE);
OutputStream bOut = retBLOB.setBinaryStream(0L);
ZipOutputStream zipOut = new ZipOutputStream(bOut);
PrintStream out = new PrintStream(zipOut,false,"UTF-8");
out.write('\ufeff');
out.flush();
zipOut.putNextEntry(new ZipEntry("filename.csv"));
while (rs.next()){
out.print("\"" + rs.getString(i) + "\"");
out.print(",");
}
out.flush();
zipOut.closeEntry();
zipOut.close();
retBLOB.close();
return retBLOB;
Run Code Online (Sandbox Code Playgroud)
但生成的csv文件未显示正确的德语字符.Oracle数据库的NLS_CHARACTERSET值也为UTF8.
请建议.