我以编程方式将数据(使用PHP 5.2)导出到.csv测试文件中.
示例数据:( Numéro 1注意重音e).数据是utf-8(没有前置BOM).
当我在MS Excel中打开此文件时显示为Numéro 1.
我可以在文本编辑器(UltraEdit)中打开它,正确显示它.UE报告角色是decimal 233.
如何在.csv文件中导出文本数据以便MS Excel正确呈现它,最好不强制使用导入向导或非默认向导设置?
我有一个表格数据,我需要导出到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) 我遇到了StreamWriter和Byte Order Marks的问题.该文档似乎表明Encoding.UTF8编码已启用字节顺序标记,但是当写入文件时,一些文件具有标记,而其他文件没有.
我正在以下列方式创建流编写器:
this.Writer = new StreamWriter(this.Stream, System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
任何有关可能发生的事情的想法都将受到赞赏.
我在C#中的asp.net mvc 2应用程序中遇到UTF8编码问题.我正在尝试让用户从字符串下载一个简单的文本文件.我试图用以下行获取字节数组:
var x = Encoding.UTF8.GetBytes(csvString);
但当我使用以下命令返回下载时:
return File(x, ..., ...);
我得到一个没有BOM的文件,所以我没有正确显示克罗地亚字符.这是因为我的bytes数组在编码后不包含BOM.我手动插入这些字节然后它正确显示,但这不是最好的方法.
我还尝试创建UTF8Encoding类实例并将布尔值(true)传递给其构造函数以包含BOM,但它也不起作用.
有人有解决方案吗?谢谢!
我需要在客户端为生成的文本数据添加UTF-8字节顺序标记.我怎么做?
当然,使用new Blob(['\xEF\xBB\xBF' + content])产量'"my data"'.
也没有'\uBBEF\x22BF'工作('\x22' == '"'成为下一个角色content).
是否可以将JavaScript中的UTF-8 BOM添加到生成的文本中?
是的,在这种情况下我确实需要UTF-8 BOM.
我目前正在使用XSLT开发CSV导出.在我的情况下,CSV文件将使用%99%的Excel,因此我必须考虑Excel行为.
我的第一个问题是csv中的德国特殊字符.即使CSV编码是UTF8,Excel也无法使用UTF8正确打开CSV文件.特殊字符变得怪异的符号.我找到了解决这个问题的方法.我刚刚添加了3个额外字节(EF BB BF - 又名BOM头),内容字节开头.因为UTF8 BOM是说'嘿伙计,它是UTF8,正确打开它'到Excel.问题解决了!
我的第二个问题是分离器.默认分隔符可以是逗号或分号,具体取决于区域.我认为它是德国的分号和英国的逗号.所以,为了防止出现这个问题,我不得不在下面添加一行:
<xsl:text>sep=;</xsl:text>
Run Code Online (Sandbox Code Playgroud)
要么
<xsl:text>sep=,</xsl:text>
Run Code Online (Sandbox Code Playgroud)
(此分隔符未实现为硬编码)
但我找不到任何解决方案的问题是,如果你添加"sep =;" 或者,当使用UT8-BOM生成CSV文件时,文件的开头"sep =",BOM无法再正确显示特殊字符!我确信BOM字节总是在字节数组的开头.此屏幕截图来自Mac OS X中的MS Excel:

前3个符号属于BOM表头.
你有没有想过这个问题,或者你有什么建议吗?谢谢.
编辑:
我分享了打印屏幕.
一个.BOM和 <xsl:text>sep=;</xsl:text>

湾 只是BOM

Java代码:
// Write the bytes
ServletOutputStream out = resp.getOutputStream();
if(contentType.toString().equals("CSV")) {
// The additional bytes in below is prefix indicates that the content is in UTF-8.
out.write(239);
out.write(187);
out.write(191);
}
out.write(bytes); // Content bytes, in this case XSL
Run Code Online (Sandbox Code Playgroud)
XSL代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" /> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Pandas 数据帧在 python 中编码孟加拉语单词。但是作为编码类型,utf-8 不起作用但 utf-8-sig 起作用。我知道 utf-8-sig 带有 BOM(字节顺序标记)。但是为什么这被称为 utf-8-sig 以及它是如何工作的?
当使用C#生成CSV文件并在Microsoft Excel中打开时,它会显示特殊符号前的字符,例如£
在Notepad ++中,Â的十六进制值为:C2
所以在将£符号写入文件之前,我已尝试过以下内容......
var test = "£200.00";
var replaced = test.Replace("\xC2", " ");
StreamWriter outputFile = File.CreateText("testoutput.csv"); // default UTF-8
outputFile.WriteLine(replaced);
outputFile.Close();
Run Code Online (Sandbox Code Playgroud)
在Excel中打开CSV文件时,我仍然在£符号前面看到"Â"字符(十六进制等效\ xC2\xA3); 它没有任何区别.
我需要使用不同的编码吗?还是我错过了什么?
我生成了一个包含外来字符的简单CSV文件.我已经注意到,如果我没有包含字节顺序标记,外国字符在Excel中没有正确显示(但是当存在BOM时它们看起来很好).
如何在首次创建文件时将BOM添加到文件的开头?我尝试了以下内容并且无法正常工作: - /
function processForm($competition, $competitionEntry) {
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
$filename = $competition->ID.".csv";
$file = "entries/".$filename;
$fields = array_keys($competitionEntry);
$submittedForm = $competitionEntry;
if(file_exists($file)) {
$fp = fopen($file, 'a');
if($fp &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
} else { // CREATE NEW FILE
$fp = fopen($file, 'w');
if($fp &&
fputcsv($fp, $BOM) && // WRITE BOM TO FILE
fputcsv($fp, $fields) &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用supercscv来编写一个utf-8编码的csv.它产生一个普通的文件,但是excel不会将它识别为utf-8,因为它没有bom标记,因此擅长丢失,因此当使用excel打开时,任何特殊字符都会被破坏.
有没有办法将文件写为UTF-8与BOM与supercsv?我找不到它.
谢谢