有時候json檔案,純文字的檔案在nginx或者tomcat上為亂碼
可能不像html或者jsp那樣可以設定字元編碼
注意nginx和tomcat都有utf8的配置
另外要注意
檔案也有編碼
linux下用vim開啟
:set encoding=utf-8
:set fileencoding=utf-8轉參考
由於以前偷懶的原因,很多資料庫都是使用latin1作為字元編碼,這樣可以原樣保留資料的位元組流,但是最近發現新版的mysql驅動,包括345各版本的最新驅動,用characterencoding=latin1 引數去訪問資料,都會出現問號亂碼的問題。
在網上查了一下,有人說是驅動裡面自帶強制轉換,所以出了問題,根據提示看了一下**,果然在
resultsetrow在getstring的時候,會使用 singlebytecharsetconverter 來強制轉碼,發生了問題。
網上說要修改驅動,我自己嘗試了一下,既然強制轉碼裡面選擇了使用cp1252,那這個字符集應該也是單字元全集,所以我直接嘗試用該字符集來連線,問題就解決了。。。。
有兩種解決方案:
1. 使用resultset中的getbytes方法,直接獲取原始bytes陣列,自己按照錄入時候的編碼new string即可。
2. 如果用了框架結構,寫了必須獲取string的,那麼連線引數可以寫
characterencoding=cp1252
程式使用的時候
rs.getstring(1).getbytes(「cp1252″)
即可獲取原始位元組陣列,然後也是按照錄入編碼進行 new string 即可。
注意這種方法可能會引起問題,由於cp1252對一些位元組的處理並不是我們理解的那樣,比如
mysql translates 0×81 to unicode 0×0081, 0x8d to 0x008d, 0x8f to 0x008f, 0×90 to 0×0090, and 0x9d to 0x009d.
如果漢字裡面剛好有著3中位元組的,就會出問題,顯示問號。。。
研究了一下,發了乙個bug帖,
估計也是沒人理會的了,呵呵,就當練練英文。
我的程式:
MySQL基礎知識 Latin1
latin1是 iso 8859 1的別名,有些環境下寫作latin 1。iso 8859 1 iso 8859 1編碼是單 位元組編碼,向下相容 ascii,其編碼範圍是0x00 0xff,0x00 0x7f之間完全和ascii一致,0x80 0x9f之間是 控制字元,0xa0 0xff之間是文字...
mysql 的 latin1 中文支援
初學者往往會犯糊塗,mysql 的預設字符集 latin1 是否支援中文?初步分析表明,是的,確實支援中文!是初步的結論,只做了初步的分析 1.先來看看 latin1 latin1 是iso 8859 1的別名,有些環境下寫作latin 1。iso 8859 1 編碼是單位元組編碼 向下相容asci...
mysql 的 latin1 支援中文
初學者往往會犯糊塗,mysql 的預設字符集 latin1 是否支援中文?初步分析表明,是的,確實支援中文!是初步的結論,只做了初步的分析 latin1是iso 8859 1的別名,有些環境下寫作latin 1。iso 8859 1編碼是單位元組編碼,向下相容ascii,其編碼範圍是0x00 0xf...