中文編碼的怪異問題

2021-08-29 06:14:10 字數 1165 閱讀 5585

先說明下問題出現的環境

[quote]

ruby 1.8.5

rails 1.1.6

mysql 5

資料庫使用gb2312編碼

在config中特別設定了encoding: gb2312屬性

開發工具用vim,檔案編碼用gb2312

每乙個action都有設定「charset=gb2312」

ruby的string編碼沒有特別設定。

[/quote]

在開發的時候用到了中文文字的詞語統計功能。其先選擇了string.count,不過這個函式怎麼呼叫的結果都不對。

只要count的物件是中文的片語,那麼結果就是錯誤的。

於是就使用了scan,很好.每次都是正確的。編寫了一小段的測試**,保證每一錯誤之後,就寫到了action中。

測試過程中,發現有個特殊的字 "出"字。只要被統計的片語中帶有這個"出"字,就會提示錯誤。錯誤提示如下

[quote]premature end of regular expression: /\263�[/quote]

不過在單獨的測試**中,這個字並不會引起錯誤. 仔細檢查了這個字的輸入和輸出過程,發現了些問題.

比如,往資料庫中新增 「促出」這個片語時,log中 post的資料是

[quote]"word"=>"\264儷\366"[/quote]

sql語句中插入的資料是

[quote] values(null, null, '促?[/quote]

當然在mysql中,用mysql-front察看的結果 還是"促出",一點都沒差。但是一旦從資料庫中讀取出來,用到mytext.scan(a.word)時,就會提示上面的 scan錯誤.

從這些表象看起來,scan是把字元轉換編碼之後才開始查詢字串的。很不巧的是,『出』的轉換似乎有些異常。 但是這個對於測試**中用到 scan('出')是解釋不通的。

而且 從資料庫中讀取的a.word的內容,如果直接輸出到log,或者檢測其長度,都是正確的。唯獨scan使用後就會有異常。

這裡有些疑問,希望了解的同學解答下.

第一:post上來的中文為啥不用gb2312編碼,看上去像utf-8 或者utf-16的編碼,這個能否調整.

第二:sql語句插入時,為什麼只能看到一半的字。而資料庫中又是正常的.

第三:怎麼繞過這個奇怪的編碼問題?

中文編碼問題

分為兩個方向 資料傳輸方向 1 伺服器端 客戶端 伺服器端用什麼編碼,客戶端就用什麼編碼 2 客戶端 網路傳輸 伺服器端 當 客戶端是瀏覽器時 表單輸入全是英文是以iso 8859 1作為編碼,輸入有中文時則以utf 8作為編碼方式,這是瀏覽器的 內建功能。當客戶端是android時,輸入中文和英文...

中文編碼問題

專案中的所有中文都放在乙個單獨的配置檔案中,在專案的resource資源目錄下,該檔案的編碼是ascll的字符集。瀏覽器傳送表單中的資料會對其進行編碼,通過url編碼,打包資料然後傳送。處理瀏覽器的編碼問題可以用jdk自帶類庫 例 parameter 這是對於 url引數進行編碼方便記錄。其中 st...

中文編碼問題

中文傳到後台要編碼2次 vat suoshu 測試 var suoshu encodeuricomponent encodeuricomponent suoshu suoshu suoshu 這個js編碼的。你單獨對中文引數進行編碼 不要一起對url進行編碼 然後再後台再用 decodeurl 解碼...