我有一个网站,可以在Firefox中使用jQuery发送土耳其语字符,但是Internet Explorer不发送土耳其语字符。我在记事本中查看了我的源文件,该文件的代码页是ANSI。
当我将其转换为不带BOM的UTF-8并关闭文件时,重新打开文件时该文件再次为ANSI。
如何将文件从ANSI转换为UTF-8?
我有一个网站,可以在Firefox中使用jQuery发送土耳其语字符,但是Internet Explorer不发送土耳其语字符。我在记事本中查看了我的源文件,该文件的代码页是ANSI。
当我将其转换为不带BOM的UTF-8并关闭文件时,重新打开文件时该文件再次为ANSI。
如何将文件从ANSI转换为UTF-8?
Answers:
关于这部分:
当我将其转换为不带Bom并关闭文件的UTF-8时,重新打开文件时,文件再次为ANSI。
最简单的解决方案是通过正确配置Notepad ++完全避免该问题。
尝试Settings
-> Preferences
-> New document
-> Encoding
->选择UTF-8
不带BOM的产品,然后选中Apply to opened ANSI files
。
这样,所有打开的ANSI文件将被视为没有BOM的UTF-8。
有关发生的情况的解释,请阅读此答案下方的评论。
要全面了解Unicode和UTF-8,请阅读Joel Spolsky撰写的精彩文章。
Apply to opened ANSI files
是在您的情况有关:当你拥有了只包含纯ASCII字符(不带重音等)的文件,而你没有BOM在文件的开头,则默认情况下将其视为ANSI文件编辑器,因为此文件中没有任何内容表示您可能要处理的是UTF-8文件。但是,当您添加(例如说)Ö
并将其另存为UTF-8 w / o BOM时,即使文件的开头没有BOM,也可以通过后面两个字节的组合Ö
(在本例中为0xC396)来学习“这必须是UTF-8”。
Ö
ANSI文件时,编辑器的行为取决于配置。
也许这不是您需要的答案,但是我遇到了类似的问题,因此我决定将其放在此处。
我需要通过记事本++将500个xml文件转换为UTF8。为什么选择记事本++?当我使用“在UTF8中编码”选项(许多其他转换器使用相同的逻辑)时,它弄乱了所有特殊字符,因此我必须显式使用“转换为UTF8”。
这里有一些简单的步骤,可以通过Notepad ++转换多个文件,而不会弄乱特殊字符(例如变音符)。
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()
毕竟,运行脚本
如果文件中没有非ASCII字符(代码点128及以上),则无BOM的UTF-8与ASCII相同,一个字节一个字节-因此Notepad ++会猜错。
您需要做的是在提供AJAX响应时指定字符编码-例如,使用PHP,您可以这样做:
header('Content-Type: application/json; charset=utf-8');
重要的部分是在每个JS响应中指定字符集-否则IE将退回到用户的系统默认编码,这在大多数情况下是错误的。