linux db2乱码,DB2乱码(开始和结束,字符串中间没有好的办法)
針對漢字亂碼
末尾亂碼:末尾第二個字節的ASCII的值大于224 或 末尾第一個字節的ASCII的值大于224 去掉辦法:case when length(colname)>1 and ascii(substr(colname,length(colname),1))>224 then 去掉最后一位
when length(colname)>2 and ascii(substr(colname,length(colname)-1,1))>224 then 去掉最后兩位
colname end
開始亂碼:第一個字節的ASCII的值大于128且小于224 , 且 第二個字節的ASCII值大于128 為前兩位亂碼 否則首位亂碼 去掉辦法:case when length(colname)>2 and ascii(substr(colname,1))>128 and and ascii(substr(colname,1))< 224 and and ascii(substr(colname,2,1)>128 then 去掉前兩位 when length(colname)>1 and ascii(substr(colname,1))>128 and and ascii(substr(colname,1))< 224 then 去掉第一位 colname end
詳見:
用 substr截取函數會產生亂碼,用right或left會把亂碼替換為空格
values (ascii(substr('硬拷貝',1,1)),ascii(substr('拷貝',1,1)),ascii(substr('貝',1,1)),ascii(left('硬拷貝',1))),
(ascii(substr('硬拷貝',2,1)),ascii(substr('拷貝',2,1)),ascii(substr('貝',2,1)),ascii(left('硬拷貝',1))),
(ascii(substr('硬拷貝',3,1)),ascii(substr('拷貝',3,1)),ascii(substr('貝',3,1)),ascii(left('硬拷貝',1)))
對于亂碼無較好的辦法,只能進行挨個字符判斷
1)?對只有在末尾和開始才有的處理
末尾第二個字節的ASCII的值大于224 且 第一個字節的ASCII值大于128 為亂碼 或 末尾第一個字節的ASCII的值大于224?待確定
開始第一個字節的ASCII的值大于128 或 第二個字節的ASCII值大于128 為亂碼?待確定
2)?對在末尾和開始、中間都有的處理
UTF-8 字符的最大長度可以為 4 個字節。非補充字符的最大長度為 3 個字節,而補充字符的長度為 4 個字節。
使用 UTF-8 格式的每個 UTF-16 字符的字節數可根據表 1 來確定。
在以上每一項中,u、w、x、y 和 z 串都是字符的位表示法。例如,U+0080 變換為二進制中的 11000010 10000000,而代用字符對 U+D800 U+DC00 變為 二進制中的 11110000 10010000 10000000 10000000。
values 128+64+32
values 128+64+32 =224
values 14*16 =224
VALUES (X'C3B1C3B2C3B3')
VALUES chr(65),chr(224)
VALUES GRAPHIC('硬拷貝'),substr(GRAPHIC('硬拷貝'),1,1)
VALUES VARGRAPHIC('硬拷貝'),substr(VARGRAPHIC('硬拷貝'),1,1)
values VARGRAPHIC(substr('貝',1,1))--出錯
UTF編碼
UTF-8就是以8位為單元對UCS進行編碼。從UCS-2到UTF-8的編碼方式如下:
UCS-2編碼(16進制) UTF-8 字節流(二進制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“漢”字的Unicode編碼是6C49。6C49在0800-FFFF之間,所以肯定要用3字節模板了:1110xxxx 10xxxxxx 10xxxxxx。將6C49寫成二進制是:0110 110001 001001, 用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
讀者可以用記事本測試一下我們的編碼是否正確。需要注意,UltraEdit在打開utf-8編碼的文本文件時會自動轉換為UTF-16,可能產生混淆。你可以在設置中關掉這個選項。更好的工具是Hex Workshop。
UTF-16以16位為單元對UCS進行編碼。對于小于0x10000的UCS碼,UTF-16編碼就等于UCS碼對應的16位無符號整數。對于不小于0x10000的UCS碼,定義了一個算法。不過由于實際使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以認為UTF-16和UCS-2基本相同。但UCS-2只是一個編碼方案,UTF-16卻要用于實際的傳輸,所以就不得不考慮字節序的問題。
總結
以上是生活随笔為你收集整理的linux db2乱码,DB2乱码(开始和结束,字符串中间没有好的办法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: window的文件能在linux,在Li
- 下一篇: Linux下的qt5.7Qftp类,[翻