问题
.csv文档的本质是文本文档,可以通过notepad++或者其他编辑器直接修改文档内容。
当然我们查看时主要使用Excel打开,但是当其中包含中文字符或全角字符时,这些特殊字符就会显示成“???”,显然这个是因为编码集不匹配的原因,那我们应该怎么解决呢?
解决方案
其实方法很简单,就是在.csv文档的开头加入编码集标识来声明编码集,这样做可以在Excel打开文档时指定编码集,下面是Javascript和Java的实例。
Javascript
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<script type="text/javascript">
function exportCSV() {
var content = document.getElementById('content');
// '\uFEFF'是重点
var uri = new Blob(['\uFEFF' + content.value], {type:"text/csv"});
var link = document.createElement("a");
link.href = URL.createObjectURL(uri);
link.style = "visibility:hidden";
link.download = "test.csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
<body>
<input type="text" name="content" id="content">
<button onclick="exportCSV()">Export</button>
</body>
</html>
Java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\\test.csv");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String content = "Chinese, 中文";
// 下面这行是重点
fileOutputStream.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});
fileOutputStream.write(content.getBytes(StandardCharsets.UTF_8));
fileOutputStream.close();
}
}
以上就是本文的全部内容。