文字變成問號:? 和 � 代表什麼

文字裡的中文變成了 ? 或 � 這個符號?兩者看起來很像,原因卻不同。很多時候檔案其實完好無缺,有時文字卻已經遺失。下面教你分辨是哪一種情況。

支援文字與以下檔案:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

例如 Excel 匯出、資料庫備份、字幕或網站程式碼。

修復

  1. 拖入檔案或貼上文字
  2. 自動修復
  3. 複製或下載
或把檔案拖到這裡
  • 不必上傳。 檔案直接在瀏覽器中修復,不會離開你的裝置。

  • 伺服器位於歐盟。 Mojibuster 在 芬蘭(歐盟)的伺服器上運作,受《一般資料保護規則》(GDPR)規範。 GDPR 全文(EUR-Lex,英文)

情況一:檔案沒問題,只是顯示成 �

如果編輯器、播放器或瀏覽器裡滿畫面都是 �,通常是檔案用 Big5 儲存,卻被當成 UTF-8 讀取。Big5 的中文位元組在 UTF-8 裡不成立,程式就在顯示時換成替代字元 �。檔案本身的位元組還是正確的。

解決方法:把原始檔案拖到上面的框中。Mojibuster 會在讀取時辨識編碼,並把檔案轉成 UTF-8。詳細說明請見 Big5 轉 UTF-8。重要:請使用檔案本身,不要從程式裡複製文字,複製後 � 就會固定下來。

情況二:? 或 � 已經存進文字裡

如果程式把含有替代字元的文字儲存或傳送出去,原本的字就遺失了。? 也一樣:當目標編碼裡沒有某個字時,程式就會換成 ?。例如另存為 Big5 時,Big5 裡沒有的字(罕用字、簡體字、表情符號等)都會變成 ?;寫入不支援中文的資料庫欄位時也會這樣。

這種情況無法反推回去,因為每個字都變成了同一個符號。Mojibuster 不會亂猜,而是告訴你有幾個地方受影響。只能從來源下手:重新匯出,或使用備份。

出現問號的常見原因

  • 資料庫:欄位或連線使用 latin1、big5 或 ascii,資料卻是以 UTF-8 送進來。MySQL 會把無法儲存的字換成 ?,請見 MySQL 與 phpMyAdmin。
  • PHP:沒有指定 charset,網頁或資料庫連線用錯編碼,中文就可能變成 ? 或 �。
  • 記事本另存為 ANSI:在繁體中文版 Windows 中,ANSI 就是 Big5。Big5 以外的字(例如簡體字)都會變成 ?。
  • PowerShell 5.1:Export-Csv 預設寫成 ASCII,中文會變成 ?,請見 PowerShell。
  • Python:encode('big5', errors='replace') 會默默把 Big5 沒有的字換成 ?,請見 Python 與 pandas。
  • 命令提示字元:Windows 主控台會把字碼頁(CP950)裡沒有的字顯示成 ?。通常只是顯示有誤,檔案本身沒問題。
  • 舊的郵件軟體:用 Big5 寄送或讀取郵件時,Big5 以外的字可能變成 ?。

如何判斷是哪一種情況

  1. 用能顯示編碼的編輯器開啟檔案,例如 Notepad++。如果狀態列顯示「ANSI」或「Big5」,就是情況一。
  2. 把檔案拖進 Mojibuster。如果結果顯示是以 Big5 讀取,而且文字恢復正常,就是情況一,請見 Big5 轉 UTF-8。
  3. 如果 Mojibuster 回報有遺失的字,就是情況二,只能重新匯出。

如果看到的不是問號,而是一堆奇怪的符號或不相干的字,那是另一種錯誤,而且多半可以修復:請見 亂碼是什麼。

常見問題

Mojibuster 能把 ? 變回原本的字嗎?

不能。一個 ? 可能代表任何字,資訊已經消失了。Mojibuster 不會更動這些地方,但會告訴你有幾處。

為什麼在一個程式裡看到 �,在另一個程式裡卻正常?

這表示檔案沒問題,只是其中一個程式用錯編碼讀取。用 Mojibuster 轉成 UTF-8 後,兩個程式都能正確顯示。

簡體字為什麼存檔後變成 ?

Big5 只收錄繁體字,沒有簡體字。另存為 Big5(ANSI)時,簡體字和其他 Big5 以外的字都會變成 ?。請改存成 UTF-8。

� 這個符號是什麼?

它是替代字元 U+FFFD。程式無法把某個位元組讀成文字時,就會插入這個符號。它表示編碼出錯,不是原本文字的一部分。

更多說明