常Latin1遇到UTF8加上簡繁中文的攪和 好一個難解的亂碼

真是頭痛的編碼問題latin1 UTF8是的,我又遇到問題了,這次的問題是出在程式本身,因為某一個相簿系統,預設的編碼是 latin1_swedish_ci,也就是預設的是Latin1編碼(ISO 8859-1),存中文的時候,可以存,也可以顯示,但是如果直接用phpMyAdmin等工具去看資料庫的時候,就會遇到一堆亂碼了,我自己是偷懶,直接寫了一個php的涵式,在Latin1和UTF8中切換,用了快了兩年,也是相安無事,反正亂碼就亂碼,我程式能讀的到,能解碼,能更新刪除就好,要我去把編碼翻掉,大改相簿系統,那就算了吧!我沒有這麼多的力氣。

反正在lain1中存中文,解出來的中文也沒有問題,和其他資料表交換資料,用一個小涵或,但是事情沒有我想的這麼簡單,以為從此就可以過著幸福快樂的日子。

好死不死的,整個系統連同相簿可能要改版到簡體中文,其他UTF編碼好解決,直接Dump出來,轉成簡體就好,但是相簿預設的是latin1,但是光是編碼,就弄死我了,修改phpMyAdmin的預設連線成「latin1_swedish_ci」無效,Download下來ConverZ無效,父用Notepad++去改編碼,也無效。我沒有辦法透過轉檔的方式,我看可能要另外寫程式了。

程式的動作
1.Latin1 轉存到 Utf8
2.Utf8的資料倒出來正體中文資料,轉成UTF8的簡體中文
3.Utf8簡體中文資料轉存回Latin1的資料表中

一共有30個表要轉,我的老天啊!有沒有比較簡單的方法啊!在網路上都沒有看到比較簡單的解法,ConverZ沒有這些功能,我該怎麼辦呢?頭㾫中。

如果我有找到比較好的解法,我再放上來,日後如果遇到,就不會這麼痛苦了,一個晚上沒有睡,也是另一個痛苦。

修改phpMyAdmin的預設連線成「latin1_swedish_ci」無效,Download下來ConverZ無效,父用Notepad++去改編碼,也無效。

在php.net的官網中看到2個函數,分別是utf8_decode和utf8_encode,其實還是要寫程式的話,這兩個內建的函式,應該會比自己寫的快很多。

隨機文章

隨機美圖

6 thoughts on “常Latin1遇到UTF8加上簡繁中文的攪和 好一個難解的亂碼

  • 2012 年 02 月 11 日 at 20:19:43
    Permalink

    习惯了简体,看繁体还有点不习惯

    Reply
    • 2012 年 02 月 13 日 at 09:31:56
      Permalink

      說的是…都是習慣的問題

      Reply
  • 2012 年 02 月 12 日 at 18:42:39
    Permalink

    你有沒有試過用iconv或piconv去轉一下呢?

    大致就是先用iconv/piconv去轉以後,再用notepad++或者ultraedit去把檔案存成utf8或者其他編碼格式的檔案

    然後為求慎重起見要碼就是改my.cnf裡面的預設連線charset或者是直接寫在db檔案上頭(加個SET)

    php裡面有個好用的mb_detect_encoding可以幫你偵測encoding type,不過你這邊案例應該是知道資料庫編碼了~我想就剩下轉碼而已~

    要不然就是加個幾行code,讓系統每次讀出資料時轉換完成後直接轉存一分到新資料庫,搞工一點就是寫個script循環轉掉~不過還是省事點用iconv吧~希望有幫助

    Reply
    • 2012 年 02 月 13 日 at 09:31:28
      Permalink

      編碼不是問題…
      只是我把兩個系統整合起來遇到問題

      Reply
  • 2012 年 02 月 12 日 at 18:44:49
    Permalink

    記得倒出來時的,檢查一下當前資料庫的預設連線charset,然後倒出來後直接用iconv轉掉..(可以的話就用mysqldump 加上set charset的參數去手動指定要使用的連線charset)

    步驟大概就如下:
    1. 倒出
    2. iconv轉檔
    3. 先倒入看看,不行就download下來確認檔案內容編碼
    4.重新倒入,收工。

    Reply
    • 2012 年 02 月 13 日 at 09:30:47
      Permalink

      這是一個複雜的問題
      問題出在我的資料庫用了兩個編碼
      UTF8是我自己寫的系統
      Lantin1是相簿系統
      在管理的時候,我已經透過小函式來處理(set …blabla)

      現在要轉成簡體
      UTF8好解~我處理起來很快
      Latin1…就比較麻煩
      基本上我已經寫程式處理的差不多了…

      累………

      Reply

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *