[20180503]珅與分隔符.txt

lfree發表於2018-05-03

[20180503]珅與分隔符.txt

--//今天再次遇到分隔符問題,以前也遇到過做一次,連結.http://blog.itpub.net/267265/viewspace-763696/
--//這個"珅"還是許多人喜歡作為名字使用..

$ cat d1.txt
123|張飛珅test|aaa1

$ cat d1.txt  | tr '|' '\n'
123
張飛?
test
aaa1

--//這樣被分割成4個欄位,導致錯誤.

$ echo 珅 | xxd -c 16
-bash: syntax error near unexpected token `|'

--//因為"珅" 編碼包含字元"|",出現錯誤.要使用引號

$ echo -n "珅" | xxd -c 16
0000000: ab7c                                     .|

--//可以"珅"的編碼是ab7c,而7c的編碼對應的就是"|".

$ echo -n "|" | xxd -c 16
0000000: 7c                                       |

--//這樣導致分割出現錯誤.實際上這個字元不屬於GB2312編碼表.
--//以前透過這個指令碼定位:
select upper(TO_CHAR (167+rownum,'xxxxxxxxxxxxx')) "10to16",chr(167+rownum)||'|' from dual connect by level+167<=254;
--//但是僅僅對資料庫字符集AMERICAN_AMERICA.US7ASCII有效.
--//對於字符集AMERICAN_AMERICA.ZHS16GBK可以使用如下查詢:

SELECT hex, UTL_RAW.cast_to_varchar2 (hex) hz
  FROM (    SELECT TO_CHAR (167 + ROWNUM, 'FMxx') || '7c' hex
              FROM DUAL
        CONNECT BY LEVEL + 167 <= 254);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2153730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章