亂碼還原 - 上

點閱:4047 平均評分:9.75 (4票) 迴響:0
作者:睡蓮 來源:池水間
以往本人要維護XOOPS 2.0.** 網站,常要使用自行上傳到空間且修改過編碼設定的phpmyadmin,而主機商提供的phpmyadmin則打入冷宮。現在,不管主機商的MySQL預設編碼為何,最新的XOOPS2.3.* 版可以讓主機商的phpmyadmin解凍。

曾在不久前於同一環境下再度安裝全新的兩個不同版本XOOPS - utf8 測試站,兩者皆用同一文字編碼與連線校對( UTF-8 Unicode ),再以主機商提供的phpmyadmin瀏覽,所得的結果是XOOPS 2.0.* 會出現亂碼,而XOOPS 2.3.* 則安然無事,中文顯示正常,由此可見XOOPS 2.3.* 在編碼方面已有明顯的改善。

雖然xoops 2.3.* 已改善了編碼方面的問題,但若是從舊版本升級至2.3.*,由於資料本質仍是以前的亂碼,升級後用主機商提供的phpmyadmin瀏覽,依然不能看到正常中文。若要使之正常,便要將主機商的phpmyadmin備份出來的亂碼資料還原為正常中文,而所需的工具就僅用一個輕便又強大的 EmEditor Professional 文字編輯器。

以下是在一個臨時建立的測試資料夾下所作的範例演示,建立於影子系統之下,儲存於此的資料檔案格式為sql,已在完成所有範例製作後重新啟動電腦,還原至沒有建立測試資料夾的狀態。

此例演示中的 EmEditor Professional 為已升級至最新版本的 8,與之前常用的版本7的不同之處在於多了如下圖7的警告視窗。

現在就來看看如何將亂碼還原成正常中文:

圖1) 開啟舊檔
開啟舊檔

圖2) 在跳出的視窗中,「檔案類型」選SQL >>「編碼」選UTF-8 >> 「全部偵測」打勾 >> 按下開啟按鈕
跳出的視窗

圖3)按下按鈕後跳出如圖的視窗,自動偵測出UTF-8的準確值為100,這時不需作任何變更設定,就按下開啟按鈕。
自動偵測UTF-8

圖4)

圖 4a:這是其中的亂碼地方,是使用utf 8,實際以latin 1儲存的結果;
使用utf 8,實際以latin 1儲存

圖 4b:為版本資訊,紅框可以看到 set names 是 utf8;
set names 是 utf8

圖 4c:紅框裡的編碼與連線較對皆為utf8。在這亂碼的資料備份裡面,只有「註解」地方(如下圖)是正常中文。
編碼與連線較對皆為utf8

圖5) 要將亂碼還原為正常中文,那麼就另存新檔,下一步便要將utf 8編碼逆向存為latin 1
逆向存為latin 1

圖6)建立新檔名 >> 存檔類型選 SQL >> 編碼選西歐語系iso-8859-1(也就是latin 1) >> 按下儲存按鈕
存檔類型選; 編碼選西歐語系iso-8859-1

圖7) 這時會跳出警告視窗,不用擔心,編碼變更只影響不是latin 1的中文「註解」地方。繼續點選最下面綠框一項,按確定。
跳出警告視窗

圖8) 新增頁籤,然後將剛存檔好的第一個頁籤關閉。
新增頁籤

圖9) 在新頁籤上開啟舊檔 >> 選擇剛存好的新檔案 >> 檔案類型為SQL >> 編碼選UTF8 >> 「全部偵測」不打勾 >> 按下開啟鈕
開啟檔案

圖10)

圖10a:之前圖4a 的亂碼地方,此時已還原為正常中文
還原正常中文

圖10b:這是將編碼逆向存為latin1後的結果,由於這部分只是作註解之用,不會影響資料的正常使用。
註解

整個還原過程已完成,可以將資料匯入phpmyadmin 裡的xoops 2.3.* 了。