C_and_CPP 板


LINE

之前在 programming 版也問過相關的話題,對這有興趣。 就我的認知提供一些看法...先承認因為版友貼的是英文,所以只有跳著喵幾眼而已, 有空的版友,還望您幫忙看有沒有講錯,感謝。 ※ 引述《jtmh ()》之銘言: : ※ 引述《elfkiller (沒有暱稱)》之銘言: : : 在寫網頁路徑變換程式 : : 而在網頁原始檔中有一段 %u5929%u4F7F ... 這樣的文字 :   這個算是 Unicode 表示法, :   都是以 %u 開頭, :   然後後面接著 4 個 16 進位數字。 :   例如「天使」這兩個字的 Unicode 碼位分別為 22825 和 20351, :   由 10 進位轉成 16 進位後就變成 5929 和 4F7F, :   再套入上述的表示法即為 %u5929 和 %u4F7F, 對這方面不熟,但我猜這 5929 跟 4F7F 應該是指 Unicode 中所謂的「code point」 也就是說今天有兩個字,外表長得像這樣:『天使』,那他們在 Unicode 的規範中, 分別是位於哪個位置? ※實際上好像不是一個外表對應一個 code point??而是分成好幾組,在某組 裡面有個長得像「天」這樣子的,其 code point 被定為 0x5929,也許另外一 組裡也有一個長得像「天」?這裡推薦一個網站 http://www.fileformat.info/info/unicode/char/search.htm 把你想要查 code point 的東西,也就是字或符號,貼上去按搜尋即可列出來。 「天」位於 0x5929,「使」位於 0x4F7F。知道位置後,要表示給人看時, 就牽涉到「編碼」。目前 Windows XP,以記事本 (notepad.exe) 的觀點, 一個檔案會有三種編碼: 1. ANSI編碼 2. UTF-8編碼 3. Unicode編碼 -- 關於「3. Unicode編碼」 若更正確來說,Unicode 比較常見的編碼至少有 UTF-8、UTF-16LE、UTF16-BE、 UTF-32LE、UTF-32BE...等,這裡的「3. Unicode編碼」不是準確的講法, 實際上應該是 Windows XP 預設採用的 UTF-16LE 編碼。 換言之,code point 為 0x5929 的「天」字,在記事本用微軟新注音打 `u 再打入對應 code point=5929,字出來後,存成「3. Unicode編碼」, 則其 raw data 會寫29 59 (LE = Little Endian)。 -- 關於「1. ANSI編碼」 這跟 Windows 控制台「地區及語言選項」的設定有關係。 簡單舉例看,raw data 寫 0x41 0xBA 0xCS 在簡體 Windows 記事本打開 會變「A好」;在繁體 Windows 打開會變「A疑」。 ANSI編碼是一種MBCS編碼,MBCS代表他裡面的任一個字,"不固定"由 1個 Byte 或 2 個 Byte 組成。好處是,因為CPU對MBCS編碼處理的單位是「1次1Byte」, 所以不會有Endian問題。CPU只有在處理像float這種,一次一定要「4個Bytes」 的資料時才必須考慮Endian。 UTF-8簡單講,在Unicode的編碼裡,他是屬於「1次1Byte」被CPU處理的那種, 跟ANSI編碼有一樣的優點。但 Windows 核心用的那種 UTF-16LE 編碼不是。 -- 重點來了,網路傳輸網址,用GET方法時,資料會放在URL內,譬如這兩個網站 http://www.yam.com/ http://wiki.livedoor.jp/sougouwiki/search?keywords= 其中 yam 首頁的是用強悍的 Big5 編碼,素人系総合 wiki 網頁是用 日文 EUC-JP 編碼 註:EUC-JP 編碼、Big5 編碼、簡體 GBK 編碼...等,都歸納為 ANSI 編碼。 我們在搜尋框輸入資料,如果是 ASCII 比如 abc 就直接轉成 ASCII 很快樂的送出 0x616263 這 3 個 Bytes。 那如果要打不在 ASCII 內的字呢?比如要搜尋「台」字,那就會有問題... 傳過去的封包,裡面 raw data 到底要不要考慮 endian?你傳了 2 Bytes 過去,還要 再額外講 endian 才能避免因為對方的 CPU 是敵營,而解讀錯資料。 所以最後變成,資料該怎麼解讀,不能由傳送方指導,而是接收方收到後,照自己使用的 編碼來解讀。而且只會用無 endian 問題的 ANSI 跟 UTF-8 編碼解讀。 那麼接收方就不用考慮 endian。傳送方用的瀏覽器要聰明到在 素人wiki 輸入「台」執行搜尋時,先判斷這張網頁的編碼是 EUC-JP,然後再把「好」轉成 EUC-JP 的編碼 0xC2E6 送過去。 同理「yam 首頁」搜尋「台」字會送 Big-5 編碼的 0xA578 過去。 -- % 存在的理由— 本來是不需要用到 % 這個東西,但搜尋完 yam 或素人wiki後,我們知道因為 get 可以 讓網址=後面的字對應搜尋框輸入的資料。 只要連上網址:http://wiki.livedoor.jp/sougouwiki/search?keywords=%C2%E6 就會重複在素人wiki搜尋「台」的動作。 keyword=後面接要搜尋的資料,那直接把網址變成 http://wiki.livedoor.jp/sougouwiki/search?keywords=台 會怎樣?如果你在一張空白網頁,說要連上這個網址,鬼才知道對方用什麼編碼 事實上不可能在keyword=後面打任何沒有在 ASCII 內的字去做get。 那怎麼轉換台字?所以這就是 % 符號存在的價值,為了能重現當初送 0xC2E6 那就 直接傳 raw data 就好,問題是直接打 keyword=C260,顯然又牴觸原本的 ASCII。 所以在每個編碼基本單位 Byte 加上一個 % 就解決。 當然如果像 Big5 的「台」編碼是 0xA578,因為 78 其實等於 ASCII 編碼下的「x」, 你跑 http://search.yam.com/wps?k=%A5x 依然等於在yam首頁輸入「台」字搜尋。 而現在的瀏覽器會在你網址有「?keyword=台」這種狀況時,預設轉成 UTF-8 編碼 這也就是為什麼我們直接在 google http://www.google.com.tw/search?&q= 的 q= 後面打個台字,就真的可以正確搜尋台字。 而在素人wiki的網址自己 DIY 打這樣 http://wiki.livedoor.jp/sougouwiki/search?keywords=台 卻不能變成搜尋台字的原因。 -- 終於打完了,好熱 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.143.13 打字錯誤修正 ※ 編輯: zlw 來自: 124.8.143.13 (07/05 22:35)
1F:推 VictorTom:推:) 07/05 23:00
2F:推 jtmh:推 ^^ 07/05 23:09
3F:推 wowtiger:Little-Endian 比較好, Big-Endian 玩 cast 要很小心 07/05 23:16
4F:推 LPH66:那只是現在的x86架構是Little-Endian的關係而已 07/06 17:38
5F:推 elfkiller:好多資料 感謝感謝 07/06 19:44







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP