- 論壇徽章:
- 0
|
本帖最后由 Calvin00 于 2012-08-11 14:16 編輯
我在 linux 下拿 /bin/pwd 來(lái)做試驗(yàn),同樣得到的新文件不能運(yùn)行。
仔細(xì)對(duì)比了一下原始 /bin/pwd 跟經(jīng)過(guò) od -An -tu1 /bin/pwd | awk '{for(i=1;i<=NF;i++){printf ("%c",$i)}}' > ~/pwd-new 得到的 pwd-new 文件,發(fā)現(xiàn) awk 在轉(zhuǎn)換某些 ASCII 碼為字符時(shí)出現(xiàn)錯(cuò)誤(大多數(shù)轉(zhuǎn)換正確,中間夾雜一些錯(cuò)誤)。
有幾個(gè)轉(zhuǎn)換錯(cuò)誤的被我抓了出來(lái):
echo 248 | awk '{printf("%c",$0)}' | od -An -tu1 不能得到希望的 248 而會(huì)得到 195 184
echo 131 | awk '{printf("%c",$0)}' | od -An -tu1 不能得到希望的 131 而會(huì)得到 194 131
問(wèn)題就出現(xiàn)在類似 248、131 這些碼上,導(dǎo)致整個(gè)出來(lái)的二進(jìn)制文件畸形、損壞,不能運(yùn)行。
這是咋回事呢????
嗯,在 debian linux 下,小于或等于 127 的 ascii 碼, awk '{printf("%c",$0)}' | od -An -tu1 可以得到跟原來(lái)一樣的碼;
大于127小于或等于191的ascii碼,awk '{printf("%c",$0)}' | od -An -tu1 會(huì)得到 194 + 原來(lái)的碼;
大于或等于192小于255的 ascii 碼,awk '{printf("%c",$0)}' | od -An -tu1 可以得 195 +從128開(kāi)始的編碼。
是說(shuō) linux 下的 gawk %c 打印大于127的擴(kuò)展ascii有問(wèn)題?
但是,在 Mac OS X 下,awk printf %c 輸出大于 127 的ASCII碼又沒(méi)有問(wèn)題:
echo 248 | awk '{printf("%c",$0)}' | od -An -tu1 能得到希望的 248
echo 131 | awk '{printf("%c",$0)}' | od -An -tu1 能得到希望的 131
真是奇怪,linux 下跟 Mac OS X 下還不同。linux 下的是 gawk ,估計(jì)有bug? |
|