2011-08-31 212 views
52

我有一個網站,我可以用Firefox中的jQuery發送我的土耳其字符,但Internet Explorer不會發送我的土耳其字符。 我在記事本中查看了我的源文件,並且此文件的代碼頁是ANSI。如何使用Notepad ++將ANSI編碼文件轉換爲UTF-8?

當我將它轉換爲沒有BOM的UTF-8並關閉文件時,當我重新打開時,該文件又是ANSI。

如何將我的文件從ANSI轉換爲UTF-8?

+1

你可以使用我寫了這個工具我也遇到了同樣的問題,並且走出了自己的路。 https://github.com/srcnalt/ANSI-to-UTF8 – Sarge

回答

60

對此部分:

當我將其轉換爲UTF-8無BOM和關閉文件,該文件又是ANSI,當我重新打開。

最簡單的解決方案是完全通過正確配置Notepad ++來避免此問題。

嘗試Settings - >Preferences - >New document - >Encoding - >選擇UTF-8沒有BOM,檢查Apply to opened ANSI files

這樣,所有打開的ANSI文件將被視爲沒有BOM的UTF-8。

要了解發生了什麼事,請閱讀下面的評論。

要充分了解Unicode和UTF-8,請閱讀Joel Spolsky的this excellent article

+0

這幫了我很多。謝謝。我不明白這種行爲。因爲我打開了一個現有的文件而不是一個新文件。 –

+1

「適用於打開的ANSI文件」與您的情況相關:如果您的文件僅包含純ASCII字符(不帶重音符號等),並且在文件開頭沒有BOM,則編輯器默認情況下將它視爲ANSI文件,因爲此文件中沒有任何內容表明您可能想要處理的是UTF-8文件。但是,如果添加了'Ö'並將其另存爲UTF-8(不包含BOM),即使文件開頭沒有BOM,也不會出現背後的雙字節組合(此處爲0xC396)情況)編輯學習「這必須是UTF-8」。 –

+2

換句話說,將ANSI Plain文件保存爲UTF-8時,輸出與保存爲ANSI時相同。當你打開它時,你必須告訴編輯*把它當作UTF-8。對於要*爲* UTF-8的文件,它必須以BOM開頭或包含某些雙字節序列。在ANSI文件中輸入Ö時編輯器的行爲取決於配置。 –

13

如果您的文件中沒有非ASCII字符(codepoints 128或更高),則沒有BOM的UTF-8與ASCII字節相同 - 因此Notepad ++會猜錯。

您需要做的是在提供AJAX響應時指定字符編碼- 例如,用PHP,你可以這樣做:

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

的重要組成部分,是與 JS響應指定字符集, - 否則IE會回落到用戶的系統默認編碼,這是大多數的時間是錯誤的。

+0

爲什麼不是這樣公認的答案?這是解釋發生的唯一答案,以及問題的真正解決方案。 – SinistraD

39

也許這不是你需要的答案,但是我遇到了類似的問題,所以我決定把它放在這裏。

我需要通過記事本++將500個xml文件轉換爲UTF8。爲什麼Notepad ++?當我使用選項「UTF8編碼」(許多其他轉換器使用相同的邏輯)時,它會搞亂所有特殊字符,所以我必須明確地使用「轉換爲UTF8」。


這裏有一些簡單的步驟,通過Notepad ++轉換多個文件而不會搞亂特殊字符(例如變音符號)。

  1. 運行記事本++,然後打開菜單插件 - >插件管理器 - >顯示 插件管理器
  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

+0

我不知道如何運行python腳本?我在一個命令行中運行它,並說它找不到記事本。 – flexwang

+2

嗨flexwang,你應該從記事本++中運行它 –