如何确定excel文件的字符编码? [复制]

Posted

技术标签:

【中文标题】如何确定excel文件的字符编码? [复制]【英文标题】:How can I determine the character encoding of an excel file? [duplicate] 【发布时间】:2012-10-25 11:17:52 【问题描述】:

可能重复:Excel to CSV with UTF8 encoding

场景:我有一个包含大量全球客户数据的 excel 文件。我不知道创建文件时使用了什么编码。

问题:如何确定 excel 文件中使用的字符编码,以便将其正确导入到其他软件中?

【问题讨论】:

我猜你的问题已经在superuser.com/questions/280603/…讨论和回答了 @JüriRuut 不是真的,这个问题是相反的。我也想要一个规范的答案,所以对这个问题 +1。 @deceze: 那么它会是“从 Excel 导出数据”? @JüriRuut 我假设他的意思是“使用某种编程语言中的某个库读取 .xls 文件”。那么这一切都是有道理的......山姆,如果我错了,请纠正这个假设。 @deceze - 你很准!为了正确导入文件,我首先需要知道它最初是如何编码的。如果您导入它并假设使用了某个字符集,您最终可能会得到错误的数据 - 某些字符会意外丢失或被其他字符替换。 【参考方案1】:

对于 Excel 2010,它应该是 UTF-8。 MS指导:http://msdn.microsoft.com/en-us/library/bb507946:

“SpreadsheetML 文档的基本文档结构由 Sheets 和 Sheet 元素组成,它们引用工作簿中的工作表。为每个工作表创建一个单独的 XML 文件。例如,具有两个工作表的工作簿的 SpreadsheetML名称 MySheet1 和 MySheet2 位于 Workbook.xml 文件中,如下代码示例所示。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<workbook xmlns=http://schemas.openxmlformats.org/spreadsheetml/2006/main xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
    <sheets>
        <sheet name="MySheet1" sheetId="1" r:id="rId1" /> 
        <sheet name="MySheet2" sheetId="2" r:id="rId2" /> 
    </sheets>
</workbook>

工作表 XML 文件包含一个或多个块级元素,例如 SheetData。 sheetData 表示单元格表并包含一个或多个 Row 元素。一行包含一个或多个 Cell 元素。每个单元格都包含一个代表单元格值的 CellValue 元素。例如,工作簿中第一个工作表的 SpreadsheetML,在单元格 A1 中只有值 100,位于 Sheet1.xml 文件中,如下面的代码示例所示。

<?xml version="1.0" encoding="UTF-8" ?> 
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <sheetData>
        <row r="1">
            <c r="A1">
                <v>100</v> 
            </c>
        </row>
    </sheetData>
</worksheet>

"

检测细胞编码:

https://metacpan.org/pod/Spreadsheet::ParseExcel::Cell

http://forums.asp.net/t/1608228.aspx/1

【讨论】:

你应该如何为给定的 Excel 文件找到这些 XML 文件? @user5359531: http://***.com/questions/8984254/how-to-view-the-xml-form-of-an-excel-file 我想知道这是否仍然是确定 Excel 工作表字符编码的准确方法,因为我有一个包含仅由 UTF-16 支持的国际字符的工作表,但 XML 显然将其标记为encoding="UTF-8"。这种编码是指除了工作表中包含的文本之外的其他内容吗? @user5359531 “我有一张包含仅 UTF-16 支持的国际字符的工作表” - 如果我理解正确,UTF-8 和 UTF-16(以及 UTF-32)都支持所有 unicode字符,他们只是使用不同的编码来做到这一点。 (UTF-8 使用 1、2、3 或 4 个字节,UTF-16 使用 2 或 4 个字节,而 UTF-32 始终使用 4 个字节)。

以上是关于如何确定excel文件的字符编码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何防止excel保存后更改csv文件编码? [复制]

字符编码及文件操作

Python ASCII 编解码器在写入 CSV 期间无法编码字符错误

java爬虫一段话里的部分字符乱码解决

如何确定字符串代表 Node.js 中的目录还是文件? [复制]

字符编码文件处理