如何使用 Notepad++ 将 ANSI 编码文件转换为 UTF-8? [关闭]
Posted
技术标签:
【中文标题】如何使用 Notepad++ 将 ANSI 编码文件转换为 UTF-8? [关闭]【英文标题】:How do I convert an ANSI encoded file to UTF-8 with Notepad++? [closed] 【发布时间】:2011-11-07 12:50:58 【问题描述】:我有一个网站,我可以在 Firefox 中使用 jQuery 发送我的土耳其语字符,但 Internet Explorer 不发送我的土耳其语字符。 我在记事本中查看了我的源文件,这个文件的代码页是 ANSI。
当我将其转换为不带 BOM 的 UTF-8 并关闭文件时,当我重新打开文件时,文件又是 ANSI。
如何将我的文件从 ANSI 转换为 UTF-8?
【问题讨论】:
您可以使用我为此编写的工具,我也遇到了同样的问题并自己解决了问题。 github.com/srcnalt/ANSI-to-UTF8 【参考方案1】:如果您的文件中没有非 ASCII 字符(代码点 128 及以上),则没有 BOM 的 UTF-8 与 ASCII 相同,字节对字节 - 所以 Notepad++ 会猜错。
您需要做的是在提供 AJAX 响应时指定字符编码 - 例如使用 php,你可以这样做:
header('Content-Type: application/json; charset=utf-8');
重要的部分是用 每个 JS 响应指定字符集 - 否则 IE 将回退到用户的系统默认编码,这在大多数情况下是错误的。
【讨论】:
为什么这不是公认的答案?这是解释正在发生的事情以及问题的真正解决方案的唯一答案。【参考方案2】:关于这部分:
当我将它转换为没有 bom 的 UTF-8 并关闭文件时,当我重新打开文件时,文件又是 ANSI。
最简单的解决方案是通过正确配置 Notepad++ 来完全避免该问题。
尝试Settings
-> Preferences
-> New document
-> Encoding
-> 选择不带BOM的UTF-8
,然后检查Apply to opened ANSI files
。
这样所有打开的 ANSI 文件都将被视为没有 BOM 的 UTF-8。
要了解发生了什么,请阅读此答案下方的 cmets。
要全面了解 Unicode 和 UTF-8,请阅读 Joel Spolsky 的 this excellent article。
【讨论】:
这对我帮助很大。谢谢。我不明白这种行为。因为我打开的是现有文件而不是新文件。Apply to opened ANSI files
与您的情况相关:当您的文件仅包含纯 ASCII 字符(没有重音符号等),并且文件开头没有 BOM 时,那么编辑器默认将其视为 ANSI 文件,因为此文件中没有任何内容表明您可能想要处理的是 UTF-8 文件。但是,当您添加 Ö
并将其保存为不带 BOM 的 UTF-8 时,即使文件开头没有 BOM,因为 Ö
后面存在两字节组合(在此为 0xC396 case) 编辑器得知“这必须是 UTF-8”。
换句话说,当您将 ANSI 普通文件保存为 UTF-8 时,输出与您将其保存为 ANSI 时的输出相同。当您打开它时,您必须告诉编辑器将其视为 为 UTF-8。对于 UTF-8 的文件,它要么必须以 BOM 开头,要么包含某些两字节序列。当您在 ANSI 文件中输入 Ö
时,编辑器的行为取决于配置。
AFAIK 唯一可以在读取时从编辑器强制执行的编码,通过将某些字符放入文件中,是带有 BOM 的 UTF-8。
@SanderdeJong 使用 7.8.5 32 位为我工作 - 我发布了一张图片【参考方案3】:
也许这不是你需要的答案,但我遇到了类似的问题,所以我决定把它放在这里。
我需要通过 Notepad++ 将 500 个 xml 文件转换为 UTF8。为什么记事本++?当我使用“在 UTF8 中编码”选项(许多其他转换器使用相同的逻辑)时,它会混淆所有特殊字符,因此我必须明确使用“转换为 UTF8”。
这里有一些简单的步骤,可以通过 Notepad++ 转换多个文件,而不会弄乱特殊字符(例如变音符号)。
-
运行 Notepad++,然后打开菜单 Plugins->Plugin Manager->Show
插件管理器
安装 Python 脚本。安装插件后,重启
申请。
选择菜单插件->Python 脚本->新建脚本。
选择其名称,然后输入以下代码:
convertToUTF8.py
import os
import sys
from Npp import notepad # import it first!
filePathSrc="C:\\Users\\" # Path to the folder with files to convert
for root, dirs, files in os.walk(filePathSrc):
for fn in files:
if fn[-4:] == '.xml': # Specify type of the files
notepad.open(root + "\\" + fn)
notepad.runMenuCommand("Encoding", "Convert to UTF-8")
# notepad.save()
# if you try to save/replace the file, an annoying confirmation window would popup.
notepad.saveAs("".format(fn[:-4], '_utf8.xml'))
notepad.close()
毕竟,运行脚本
【讨论】:
很好的解决方案。由于我使用 notepad++ 本地化,我不得不翻译“编码”和“转换为 UTF-8”选项,这很奇怪。 不知如何运行python脚本?我在命令行中运行它,它说找不到记事本。 嗨 flexwang,你应该从 Notepad++ 运行它 我收到了因为中文字符的错误信息。 dropbox.com/s/f2efnzt9cd2i5or/… 不再工作了:(以上是关于如何使用 Notepad++ 将 ANSI 编码文件转换为 UTF-8? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章