如何使用 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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用正则表达式表示汉字,目的是要在notepad++筛选出所有汉字,编码格式为ANSI

如何检查TXT文本是否ANSI编码格式的?

java如何判断txt文件是ansi编码?

notepad++中cmd运行中文乱码

如何将txt文本文件的ansi编码转换成utf-8编码

怎么把win10的txt文件将默认格式从UTF-8改为ANSI?