iT邦幫忙

0

編碼問題

  • 分享至 

  • xImage

各位大大好
小弟目前碰到一個問題
現在小弟要執行一項流程:
匯入xls檔 -> 將檔案寫入資料庫 -> 將部分資料取出轉成txt檔
檔案之中包含中文
由於最後的txt檔編碼需求是Big5
所以小弟對資料寫入資料庫的時候做了一些處理
像這樣

$val = mb_convert_encoding($val,"BIG5","UTF-8");

寫入資料庫的時候 資料庫的校正也是設定為big5_chinese_ci
此時中文顯示也是正常的

但在要進行轉txt檔的時候我碰到了問題
我先在檔案前面設定

mysql_query( "SET NAMES big5", $link );
mysql_query( "SET CHARACTER_SET_CLIENT=big5", $link );
mysql_query( "SET CHARACTER_SET_RESULTS=big5", $link );

但發現我資料抓出來會有問題會呈現一堆問號
用 mb_detect_encoding($ra2[pay_name]) //資料庫中的名字
輸出顯示是ASCII
我不懂為什麼會莫名出現ASCII
那這樣我應該怎麼進行轉換
因為我也找不到ASCII 轉成big5的方法QQ

如果資料庫是 UTF-8
存進去的時候用 UTF-8
處理 txt 的時候在轉成 Big5
這樣會不會比較好?
st474ddr iT邦新手 2 級 ‧ 2020-01-15 17:23:49 檢舉
會 哈哈
我問完也才想到
動手做完 就成功了 謝謝大大
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
舜~
iT邦高手 1 級 ‧ 2020-01-15 16:20:51
最佳解答

為什麼不在寫入txt的時後再轉big 5 ?

我的經驗....(mysql)
雖然您把資料庫的校正是設定為big5_chinese_ci,但已存在的欄位並不會改變,只有在新增的欄位才會是您指定的編碼,先前存在的欄位還是utf8,除非您手動一個一個現有的欄位改成big5...

2.您用的是 mysql_query 還是 mysql i _query ??
若您用mysqli來存取資料,設定就別用mysql_query ~~

ASCII碼與字串相互轉換的方法

st474ddr iT邦新手 2 級 ‧ 2020-01-15 16:27:18 檢舉

為什麼不在寫入txt的時後再轉big 5

所以是在要寫入的時候在針對該值做轉換嗎?
像這樣:

$ra2[pay_name] = mb_convert_encoding($ra2[pay_name],"BIG5", "auto");

除非您手動一個一個現有的欄位改成big5

1.只有一個欄含中文 我只有設定那個欄位是big5
2.mysql_query

st474ddr iT邦新手 2 級 ‧ 2020-01-15 17:24:07 檢舉

感謝大大

我要發表回答

立即登入回答