如何使用Notepad ++将ANSI编码的文件转换为UTF-8?[关闭]


72

我有一个网站,可以在Firefox中使用jQuery发送土耳其语字符,但是Internet Explorer不发送土耳其语字符。我在记事本中查看了我的源文件,该文件的代码页是ANSI。

当我将其转换为不带BOM的UTF-8并关闭文件时,重新打开文件时该文件再次为ANSI。

如何将文件从ANSI转换为UTF-8?


1
您可以使用我为此编写的工具,我也遇到了同样的问题,并找到了自己的出路。 github.com/srcnalt/ANSI-to-UTF8
Sarge,

Answers:


71

关于这部分:

当我将其转换为不带Bom并关闭文件的UTF-8时,重新打开文件时,文件再次为ANSI。

最简单的解决方案是通过正确配置Notepad ++完全避免该问题。

尝试Settings-> Preferences-> New document-> Encoding->选择UTF-8不带BOM的产品,然后选中Apply to opened ANSI files

notepad ++ UTF-8适用于打开的ANSI文件

这样,所有打开的ANSI文件将被视为没有BOM的UTF-8。

有关发生的情况的解释,请阅读此答案下方的评论。

要全面了解Unicode和UTF-8,请阅读Joel Spolsky撰写的精彩文章


那对我很有帮助。谢谢。我不明白这种行为。因为我打开的是现有文件,而不是新文件。
Manuel Kuehner博士2014年

2
Apply to opened ANSI files是在您的情况有关:当你拥有了只包含纯ASCII字符(不带重音等)的文件,而你没有BOM在文件的开头,则默认情况下将其视为ANSI文件编辑器,因为此文件中没有任何内容表示您可能要处理的是UTF-8文件。但是,当您添加(例如说)Ö并将其另存为UTF-8 w / o BOM时,即使文件的开头没有BOM,也可以通过后面两个字节的组合Ö(在本例中为0xC396)来学习“这必须是UTF-8”。
jakub.g 2014年

2
换句话说,将ANSI普通文件另存为UTF-8时,输出与将其另存为ANSI时相同。您必须告诉编辑器在打开它时将其视为UTF-8。对于要UTF-8的文件,它要么必须以BOM表开头,要么包含某些两个字节的序列。当您输入ÖANSI文件时,编辑器的行为取决于配置。
jakub.g 2014年

1
AFAIK可以在读取时通过在文件中放置某些字符来在编辑时强制执行的唯一编码是带有BOM的UTF-8。
jakub.g 2016年

1
@SanderdeJong使用7.8.5 32位为我工作-我发布了一张图片
jakub.g

43

也许这不是您需要的答案,但是我遇到了类似的问题,因此我决定将其放在此处。

我需要通过记事本++将500个xml文件转换为UTF8。为什么选择记事本++?当我使用“在UTF8中编码”选项(许多其他转换器使用相同的逻辑)时,它弄乱了所有特殊字符,因此我必须显式使用“转换为UTF8”。


这里有一些简单的步骤,可以通过Notepad ++转换多个文件,而不会弄乱特殊字符(例如变音符)。

  1. 运行Notepad ++,然后打开菜单Plugins-> Plugin Manager-> Show Plugin Manager
  2. 安装Python脚本。安装插件后,重新启动应用程序。
  3. 选择菜单插件-> Python脚本->新建脚本
  4. 选择其名称,然后使用以下代码:

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()

毕竟,运行脚本


2
很好的解决方案。由于我使用notepad ++本地化,因此我不得不转换“编码”和“转换为UTF-8”选项,这很奇怪。
Piotr

我想知道如何运行python脚本吗?我在命令行中运行它,它说找不到记事本。
flexwang 2014年

2
嗨flexwang,您应该从Notepad ++运行它
村上淳

由于中文字符,我得到了错误提示。dropbox.com/s/f2efnzt9cd2i5or/...
张龙旗

2
不再工作了:(
Phil

15

如果文件中没有非ASCII字符(代码点128及以上),则无BOM的UTF-8与ASCII相同,一个字节一个字节-因此Notepad ++会猜错。

您需要做的是在提供AJAX响应时指定字符编码-例如,使用PHP,您可以这样做:

header('Content-Type: application/json; charset=utf-8');

重要的部分是在每个JS响应中指定字符集-否则IE将退回到用户的系统默认编码,这在大多数情况下是错误的。


为什么这不是公认的答案?这是唯一可以解释正在发生的事情以及该问题真正解决方案的答案。
马特恩德雷- Botond
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.