uniq處理全形字符時的問題

2021-08-27 10:12:41 字數 776 閱讀 4637

乙個程序執行了整整一天還沒結束,本來應該只需要半天左右就可以全部build完成了,一步一步查原因,發現在uniq處理全形字符的問題上。

先看下面這個現象

[root@localhost build]$ cat text 

12580

10086

20086

58000858

[root@localhost build]$ uniq text

12580

5805

[root@localhost build]$

這個輸出,明顯不是想要的,這主要是全形字符所帶來的問題

在很多資料處理時,可能資料都是**於使用者的輸入,所以這時一些全形字符或者是大小寫不一致的問題,就隨處可見了,大小寫的問題很容易想到要處理,全形字符也是需要處理或者設定處理環境的。

uniq命令在判斷兩個字串是否相等的時候,和lc_all這個環境變數是有很大關係的,如果將其設定為utf8,那麼有可能一些不同的字元被判斷為相同的。我們可以把這個環境變數的值設定為c,這樣的話uniq就會乙個乙個位元組的對兩個字串進行比較,這也是我們想要的結果和方式。

如下:

[root@localhost build]$ export lc_all=c

[root@localhost build]$ uniq text

12580

10086

20086

58000858

[root@localhost build]$

coreseek檢索時全形字符對全文檢索質量的影響

近來試用一段時間後,發現一些全形字符,尤其是雙引號,書名號對英文的影響有些嚴重.比如搜尋php時,出來的前幾條中都沒有php詞樣.經過一段時間觀察,發現這些出現異常的內容裡,都帶有這些全形符號.李沫南說其它應用 未發現這個狀態.但我這兒兩台測試機都已發生此現象.詳細內容還得觀察一段時間.目前只能暫時...

MySQL儲存全形字符和半形字元的區別

很不巧公司內測im的時候又遇到mysql data truncated錯誤,日誌記錄還是在mysql stmt fetch呼叫的時候出現的。鑑於之前的經驗,應該是給定的結果集繫結區域長度不夠造成的,反覆www.cppcns.com檢查了好多遍沒發現問題。我在 中都是對應的關係,比如char 20 我...

oracle判斷漢字和全形字符的方法 轉

最近由於單位提了乙個需求,要判斷提供的使用者名稱裡不有全形字符,至少有兩個漢字。找了半天,想通過正規表示式來解決,但測試了好久才發現,oracle 的正則函式regexp like 不支援 un 匹配 n,其中 n 是以四位十六進製制數表示的 unicode 字元 的判斷,例如,u00a9 匹配版權...