【问题标题】:How can I determine the character encoding of an excel file? [duplicate]如何确定excel文件的字符编码? [复制]
【发布时间】: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 - 你很准!为了正确导入文件,我首先需要知道它最初是如何编码的。如果您导入它并假设使用了某个字符集,您最终可能会得到错误的数据 - 某些字符会意外丢失或被其他字符替换。

标签: excel character-encoding


【解决方案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 文件?
  • 我想知道这是否仍然是确定 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 个字节)。
猜你喜欢
  • 2015-05-20
  • 2012-06-16
  • 2012-03-16
  • 2014-01-11
  • 2019-07-05
  • 2012-07-07
  • 2011-05-14
  • 1970-01-01
相关资源
最近更新 更多