Microsoft Word DOC 和 DOCX 文件的字符编码?

Posted

技术标签:

【中文标题】Microsoft Word DOC 和 DOCX 文件的字符编码?【英文标题】:Character encoding of Microsoft Word DOC and DOCX files? 【发布时间】:2015-03-26 03:48:40 【问题描述】:

我对 Microsoft Word 使用的编码不太熟悉。如果有人从 Word 中保存 .doc 或 .docx 文件,使用的标准编码是什么?

我猜它不是 UTF-8,因为结果文本(粘贴在 UTF-8 编码的文本文件中)不支持某些标点符号(例如引号)。

例如,当粘贴到 UTF-8 文本文件中时,开头的 Word“智能引用”会产生 ì 符号。如果 Word 确实以 UTF-8 编码,那么 Word 如何尝试呈现实际的 UTF-8 character?

编辑

经过一番挖掘,我可以看到 Microsoft Word .docx 文件实际上是一种压缩格式。解压缩它会导致解压缩许多 .xml 文件。

但是,UTF-8 编码的文本文件无法支持这些“智能”引号仍然令人困惑。任何有启发性的信息都会有所帮助。

【问题讨论】:

我无法重现该行为。可能是您的文本编辑器的问题?您可以使用 HxD 等十六进制编辑器进行检查,并查看实际写入文本文件的内容。 'LEFT DOUBLE QUOTATION MARK' (U+201C) 应使用以下 三个 字节进行编码:E2 80 9C 我不知道您使用什么文本编辑器来编辑该 xml 文件。我现在最好的选择是它做得不好。你在使用记事本++吗?如果没有,我会下载并安装 Notepad++。编码的使用非常透明。 据我所知,notepad++ 是一个简单的文本编辑器,不具备读取 pdf 或 docx 文件等二进制文件的功能。这就像让您的说英语的朋友记事本先生索引或翻译俄语文本。这是完全不同的字母/语言(不同的字符编码) 【参考方案1】:

如今,docx 文件实际上是一堆压缩的 xml 文件。其中一个文件是document.xml 文件,它以以下行开头(即 xml 序言):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

如您所见,它是 UTF-8 编码。

编辑

UTF-8 支持完整的 Unicode 字符集。只是为了完整起见,这并不意味着所有 UTF-8 字符实际上都可以在 xml 文件中使用。即使是 CDATA 块也有其局限性。但话虽如此,存储 ` 或 ì 不是问题。

更重要的是,文件格式与应用程序本身的复制粘贴行为没有任何关系。

不过,这里是 word 存储 ` 和 ì 符号的方式。

更正

有点令人困惑,但我刚刚意识到,通过“智能引号”,您可能指的是 Word 必须表示弯引号的机制。在我之前的回答中,我认为您的意思是“反引号”,这是另一回事。 - 很抱歉造成混乱。

好吧,无论如何,这里是这些智能引号的 unicode:

让我们将它们放在一个简单的 UTF-8 编码文本文件中。 结果并不那么壮观:

U+2018 在 UTF-8 中编码为 E2 80 98 U+2019 在 UTF-8 中编码为 E2 80 99 U+201C 在 UTF-8 中编码为 E2 80 9C U+201D 在 UTF-8 中编码为 E2 80 9D

所以,我更进一步,将它们放入 word 文件中。 我输入了一行带有常规引号和一个带有智能引号的行。

“ this is a test “ 
“ this is another test ”

然后,我保存了这个东西并查看了它是如何存储在 Word 的 xml 结构中的。实际上它完全按预期存储。

【讨论】:

正是我想要的。我正在为 DOCX 文件使用 Find & Replace PowerShell,默认情况下编码设置为 ASCII,导致“?”将其存储回 XML 文件后的符号。另一种似乎可行的编码类型是 OEM,但我不确定这是否正确。呃,它在 XML 文件的顶部。谢谢。 :D 我发现仅仅将.doc 文件的扩展名更改为.zip 是行不通的(这对.docx 有效)。如何查看.doc 文件的 XML 组件? @ZachSmith 尽管今天有时仍在使用,.doc 实际上是一种过时的格式。 .doc 格式自 90 年代初就已经存在,当时还没有“开放格式”。所以,.doc 是二进制格式,内部不使用 xml。这是完全不同的。实际上,docx 从 2007 年就已经存在,所以你会认为大多数人现在已经切换了。但是还是……

以上是关于Microsoft Word DOC 和 DOCX 文件的字符编码?的主要内容,如果未能解决你的问题,请参考以下文章

python 使用LibreOffice的命令行界面将PDF文件转换为与Microsoft Office Word兼容的doc / docx文件。

docx文件转word文档

怎么使用poi修改word(doc和docx),如何修改带表格的word。高手指点下。小弟刚接触。非常着急

Python:读取 .doc.docx 两种 Word 文件简述及“Word 未能引发事件”错误

Pig - 使用 pig 加载 Word 文档(.doc 和 .docx)

docx文件是啥?怎样转换成Word文档?