为什么Netbeans、Aptana Studio和Komodo编辑都不保存在UTF-8中?

为什么Netbeans、Aptana Studio和Komodo编辑都不保存在UTF-8中?,utf-8,text-editor,netbeans-7,aptana3,komodoedit,Utf 8,Text Editor,Netbeans 7,Aptana3,Komodoedit,我又回到了开发阶段,想为HTML5/JQuery找到一个好的编辑器 能够以UTF-8格式保存文件很重要 然而,尽管我在NetBeans 7.0中将我的项目设置为UTF-8编码,但当我在项目中创建一个文件,然后在记事本++中查看它时,该文件是用ANSI编码的,我必须手动将编码设置为UTF-8: 在Aptana Studio 3中,我将工作区设置为UTF-8编码,我的项目继承了UTF-8编码,但当我在项目中创建一个文件并在记事本++中查看它时,它是用ANSI编码的,我必须手动将编码更改为UTF-8:

我又回到了开发阶段,想为HTML5/JQuery找到一个好的编辑器

能够以UTF-8格式保存文件很重要

然而,尽管我在NetBeans 7.0中将我的项目设置为UTF-8编码,但当我在项目中创建一个文件,然后在记事本++中查看它时,该文件是用ANSI编码的,我必须手动将编码设置为UTF-8:

在Aptana Studio 3中,我将工作区设置为UTF-8编码,我的项目继承了UTF-8编码,但当我在项目中创建一个文件并在记事本++中查看它时,它是用ANSI编码的,我必须手动将编码更改为UTF-8:

因此,我尝试了Komodo Edit 7,并在文件中手动将编码设置为UTF-8,保存了文件,在Notepad++中查看,该文件是ANSI格式的

我注意到,在这些编辑器中,如果我在文件中放入一个德语umlaut字符,那么Notepad++会将其显示为ANSI作为UTF-8,但我仍然必须在Notepad++中手动将其更改为UTF-8

我想要一个以UTF-8保存的编辑器的原因是我记得几年前有一个项目,文件中有德语和法语字符,在不同的编辑器中查看和保存这些字符后,这些字符将被垃圾字符替换。解决方案是最初总是将文件的编码设置为UTF-8

我假设编辑器现在已经非常先进了,如果您指定文件应该保存在UTF-8中,那么它们实际上是以每个现代文本编辑器都能识别的方式保存在UTF-8中的。不是这样吗?关于UTF-8的现代文本编辑器和开发环境,我不了解什么


如何让这些编辑器以UTF-8编码保存其文件?

仅包含字符的UTF-8编码文件,该文件在ASCII表中也存在前128个Unicode字符,即基本字母数字字符与ASCII/ANSI编码文件无法区分。我的猜测是Notepad++根本无法做出区分,因为没有,默认为ANSI。当包含ASCII表中不包含的字符时,可以看到差异。ANSI作为UTF-8,我只能猜测这意味着该文档包含ANSI表a.k.a.Latin-1中的字符,并保存在UTF-8中

换句话说,您的IDE可能很好,问题在于Notepad++


试试像这样的角色漢字, 这将产生一个非常独特的UTF-8字节序列,它肯定不是ANSI。

一个UTF-8编码文件,它只包含ASCII表中也存在的字符前128个Unicode字符,即基本字母数字字符与ASCII/ANSI编码文件无法区分。我的猜测是Notepad++根本无法做出区分,因为没有,默认为ANSI。当包含ASCII表中不包含的字符时,可以看到差异。ANSI作为UTF-8,我只能猜测这意味着该文档包含ANSI表a.k.a.Latin-1中的字符,并保存在UTF-8中

换句话说,您的IDE可能很好,问题在于Notepad++


试试像这样的角色漢字, 这将产生一个非常独特的UTF-8字节序列,这肯定不是ANSI。

从我在本主题中看到的内容来看,记事本的UTF-8等同于记事本++的UTF-8,这意味着包含BOM。如果文件使用此编码保存并在NetBeans中打开,它将实际显示BOM序列的-字符或?字符,具体取决于项目或IDE的编码是否设置为UTF-8。但是,如果您将文件保存在记事本++中,编码为UTF-8而不包含BOM,并且将项目定义为UTF-8,或者将netbeans\u default\u选项包含在-J-Dfile.encoding=UTF-8中,您将看到我认为应该是UTF-8的内容。不幸的是,如果您试图在NetBeans中编辑此文件而不包含ANSI代码集之外的字符,您会看到您在问题中提到的编码设置为ANSI的文件的行为


因此,为了回答您的问题,请记住,并非所有编辑对UTF-8的概念都是相同的。记事本++提供了关于文件真正编码的最实际的信息。我想说,在Linux或Mac环境中开发可能是确保本地化正确的一个很好的选择,但在Windows上,一个不错的解决方法可能是在文件中包含一个非ANSI字符,以确保它始终保存为UTF-8非BOM文件。顺便说一下,这些都是针对NetBeans开发的。我还没有对其他人进行过测试,不过我敢打赌,如果他们有非ANSI字符,他们会在Windows机器上正确保存文件。对不起kluge帮,但不管怎样,我希望它能帮助那些在同一问题上挣扎的人。

从我在这篇文章中看到的 主题,记事本的UTF-8等同于记事本++的UTF-8,这意味着包含BOM。如果文件使用此编码保存并在NetBeans中打开,它将实际显示BOM序列的-字符或?字符,具体取决于项目或IDE的编码是否设置为UTF-8。但是,如果您将文件保存在记事本++中,编码为UTF-8而不包含BOM,并且将项目定义为UTF-8,或者将netbeans\u default\u选项包含在-J-Dfile.encoding=UTF-8中,您将看到我认为应该是UTF-8的内容。不幸的是,如果您试图在NetBeans中编辑此文件而不包含ANSI代码集之外的字符,您会看到您在问题中提到的编码设置为ANSI的文件的行为


因此,为了回答您的问题,请记住,并非所有编辑对UTF-8的概念都是相同的。记事本++提供了关于文件真正编码的最实际的信息。我想说,在Linux或Mac环境中开发可能是确保本地化正确的一个很好的选择,但在Windows上,一个不错的解决方法可能是在文件中包含一个非ANSI字符,以确保它始终保存为UTF-8非BOM文件。顺便说一下,这些都是针对NetBeans开发的。我还没有对其他人进行过测试,不过我敢打赌,如果他们有非ANSI字符,他们会在Windows机器上正确保存文件。对不起kluge帮派,但不管怎样,我希望它能帮助解决同样问题的人。

在Aptana中,当我创建并保存包含文本的文件时漢字lkdfjsdlfksjdlfksdä,在记事本++中,它显示为ANSI和UTF-8。当我在Windows7/Notepad中打开该文件时,添加aaa并保存该文件,然后Notepad将该文件显示为UTF-8。我认为文本文件将此信息保存在前三个字符或BOM中,尽管我现在看到在Aptana中没有办法指定UTF-8 BOM,但只是UTF-8。UTF-8不需要BOM。事实上,在UTF-8中,BOM是不受欢迎的,因为UTF-8故意设计为向后兼容ASCII。也许这就是ANSI作为UTF-8的意思。我知道记事本不管怎样都喜欢添加BOM表。这个答案是正确的。当没有BOM表时,记事本++将尝试根据文件中的内容确定文件编码。这并不总是正确的。如果您在文件中输入一些泰语字符,即使您尝试在不使用BOMIn Aptana的情况下转换为utf8,记事本++也会猜测ANSI,当我创建并保存一个包含文本的文件时漢字lkdfjsdlfksjdlfksdä,在记事本++中,它显示为ANSI和UTF-8。当我在Windows7/Notepad中打开该文件时,添加aaa并保存该文件,然后Notepad将该文件显示为UTF-8。我认为文本文件将此信息保存在前三个字符或BOM中,尽管我现在看到在Aptana中没有办法指定UTF-8 BOM,但只是UTF-8。UTF-8不需要BOM。事实上,在UTF-8中,BOM是不受欢迎的,因为UTF-8故意设计为向后兼容ASCII。也许这就是ANSI作为UTF-8的意思。我知道记事本不管怎样都喜欢添加BOM表。这个答案是正确的。当没有BOM表时,记事本++将尝试根据文件中的内容确定文件编码。这并不总是正确的。如果您在文件中输入一些泰语字符,即使您尝试在没有BOM表的情况下转换为utf8,notepad++也会猜测ANSI