[問題] 關於中文編碼問題 想請教有無資料可查閱

看板Programming作者 (Bad_To_The_Bone)時間11年前 (2013/12/11 14:54), 編輯推噓21(210104)
留言125則, 10人參與, 最新討論串1/1
大家好 想請教一下關於中文編碼的問題 以 "複製" 兩個字來看 我利用google搜尋的網址 測試 用%BD%C6%BB%73 可以得到與 %E8%A4%87%E8%A3%BD 一樣的結果 ( https://www.google.com.tw/search? safe=off&rlz=1C1SAVA_enTW501TW501&espv=210&es_sm=93&q=%BD%C6%BB%73 )不縮網址 ( https://www.google.com.tw/search? safe=off&rlz=1C1SAVA_enTW501TW501&espv=210&es_sm=93&q=%E8%A4%87%E8%A3%BD ) 不縮網址 ========================================================== 我看了一下一個文字檔如果我用winxp 用pspad輸入 "複製" 在hex editor裡面看到的是 BDC6BB73 我嘗試以Hex editor把BDC6BB73 的部分以 E8A487E8A3BD 取代 而填入後直接打開顯示為亂碼 "銴殴ˊ" =========================================================== 另外如果在GOOGLE搜尋欄位搜尋 "%E8%A4%87%E8%A3%BD" 一樣能找到一些與 "複製" 相關的網頁 複製狗狗技術進軍英國- Yahoo奇摩新聞 真的有辦法複製人腦嗎?IBM的複製人工智慧計畫大公開 =========================================================== 由於去Browser版看好像大多都是在討論亂碼的問題 回答多屬於修改瀏覽器的設定 想請問一下在這邊的大大有沒有對這方面有涉獵的 是否有工具/網頁 OR 以程式讀BYTE做修改的方式做轉換 (寫程式應該不困難 但是不懂轉換原則) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.59.147.226

12/11 14:57, , 1F
前面是BIG5後面是UTF-8
12/11 14:57, 1F

12/11 14:57, , 2F
轉換用ConvertZ
12/11 14:57, 2F
※ 編輯: donkeychen 來自: 210.59.147.226 (12/11 14:59)

12/11 15:05, , 3F
感謝azureblaze大大 我剛剛試了一下
12/11 15:05, 3F

12/11 15:05, , 4F
一個binary檔案 裡面內容只有
12/11 15:05, 4F

12/11 15:06, , 5F
E8A487E8A3BD 跟一個binary 裡面
12/11 15:06, 5F

12/11 15:06, , 6F
內容只有 BDC6BB73 都存成.txt檔
12/11 15:06, 6F

12/11 15:07, , 7F
用notepad下都可打開 都會顯示正常的
12/11 15:07, 7F

12/11 15:08, , 8F
複製 想請問一下是編輯器自己偵測的嗎
12/11 15:08, 8F

12/11 15:38, , 9F
是的, 不過不太準確; 可參見本版 #17GlyKP2
12/11 15:38, 9F

12/11 15:39, , 10F
不過理論上如果真是 UTF-8 那應該不會認錯
12/11 15:39, 10F

12/11 15:39, , 11F
你pspad就有編碼設定了 全部copy=>改編
12/11 15:39, 11F

12/11 15:39, , 12F
另外打開後你也可以另存看對話框的選項
12/11 15:39, 12F

12/11 15:39, , 13F
碼=>存回去 就可觀察檔案內編碼不同
12/11 15:39, 13F

12/11 15:41, , 14F

12/11 15:43, , 15F

12/11 16:43, , 16F
你到底想幹嘛?簡單的編碼轉換可以用任意
12/11 16:43, 16F

12/11 16:44, , 17F
可切換編碼的hex editor,把想轉的複製到
12/11 16:44, 17F

12/11 16:44, , 18F
剪貼簿,再選擇新的編碼->貼上,就轉換了
12/11 16:44, 18F
大大 我有一份工作上需要用到的log檔案 整份log的中文部分呈現亂碼 但是我明確的知道這個呈現亂碼的地方該是中文的"複製" 我不想直接在板上講明自己在做什麼(鬼)工作 所以把我覺得可能有問題的部分po到板上 但是如果大大真的不嫌棄 那可以到 https://dl.dropboxusercontent.com/u/57491997/CoreLog.log 下載 搜尋1111(文字)即可找到有問題的地方 這份檔案我嘗試過MOONRAKER大大的做法 會從原本的 E8A487E8A3BD 變成 E98AB4EF8BACCB8A 他把我原本呈現錯誤的字(亂碼)以utf-8的方式存起來了... ※ 編輯: donkeychen 來自: 210.59.147.226 (12/11 17:40)

12/11 17:45, , 19F
目前此檔案拉到chrome可以顯示為中文
12/11 17:45, 19F

12/11 17:46, , 20F
但是如果直接點上面的dropbox的連結
12/11 17:46, 20F

12/11 17:46, , 21F
以chrome開啟 還是會有亂碼
12/11 17:46, 21F

12/11 17:52, , 22F
那是因為dropbox告訴chrome編碼是英文
12/11 17:52, 22F

12/11 17:53, , 23F
沒人說(直接開)chrome會想辦法自己偵測
12/11 17:53, 23F

12/11 17:55, , 24F
喔喔 了解 那這樣應該chrome選utf-8是
12/11 17:55, 24F

12/11 17:56, , 25F
對的 我猜是PSPAD跟LPH66大大說的一樣
12/11 17:56, 25F

12/11 17:56, , 26F
誤判為別國語系
12/11 17:56, 26F

12/11 17:57, , 27F
這…你當然要正確的中文字去轉阿
12/11 17:57, 27F

12/11 17:58, , 28F
不知道編碼就是強開看對不對 不是轉碼
12/11 17:58, 28F

12/11 17:58, , 29F
不然硬轉當然就轉爛了
12/11 17:58, 29F

12/11 18:52, , 30F
大大 我的意思是我的pspad一開始就以
12/11 18:52, 30F

12/11 18:53, , 31F
ANSI的方式打開 如果我選utf-8 關掉
12/11 18:53, 31F

12/11 18:53, , 32F
檔案的時候不存 他下次打開同個檔案 就
12/11 18:53, 32F

12/11 18:53, , 33F
以utf-8 開啟 就會正確顯示
12/11 18:53, 33F

12/11 18:54, , 34F
然而 再選ANSI後 關閉檔案(不存)
12/11 18:54, 34F

12/11 18:54, , 35F
下次開啟又以ansi開啟
12/11 18:54, 35F

12/11 18:55, , 36F
pspad看起來選擇改變編碼 另存 反而是
12/11 18:55, 36F

12/11 18:55, , 37F
把當下顯示錯誤的東西以新的編碼方式
12/11 18:55, 37F
還有 50 則推文
還有 4 段內文
12/12 14:39, , 88F
你算的過程沒錯,只是我完全無法理解為何
12/12 14:39, 88F

12/12 14:40, , 89F
要把 e8 a4 87,分別加上 FF 又學 UTF-8
12/12 14:40, 89F

12/12 14:41, , 90F
的方式編碼,目的?也許是要簡單加密吧
12/12 14:41, 90F

12/12 14:42, , 91F
更正!1A是十進位裡的26
12/12 14:42, 91F

12/12 14:46, , 92F
BINARY是二進位檔,是最原始的1,0構成的
12/12 14:46, 92F

12/12 14:47, , 93F
二進位檔,是機器語言.
12/12 14:47, 93F

12/12 14:50, , 94F
purpose大大我不排除code有做"冗餘" or
12/12 14:50, 94F

12/12 14:51, , 95F
不省空間的德州佬行為畢竟是別人的code
12/12 14:51, 95F

12/12 14:52, , 96F
但是在各位的指導上對於編碼更有概念了
12/12 14:52, 96F

12/12 14:55, , 97F
0F(16進制)=15(十進制)
12/12 14:55, 97F

12/12 14:57, , 98F
10(十六進制)=16(十進制),沒到X
12/12 14:57, 98F

12/12 15:11, , 99F
快點來鞭我或指導我,讓我也進步一下
12/12 15:11, 99F

12/12 15:12, , 100F
當你們好心來指導後進.雖然我不懂
12/12 15:12, 100F

12/12 23:21, , 101F
P大,0x90換算成十進制是多少?!真心發問
12/12 23:21, 101F

12/12 23:22, , 102F
非反串.該怎麼換算?!
12/12 23:22, 102F

12/13 00:19, , 103F

12/13 00:20, , 104F
別算這種無聊的東西,跟我一起去八卦亂板
12/13 00:20, 104F

12/13 00:43, , 105F
于同學的問題應該是0x90的"x"
12/13 00:43, 105F

12/13 00:43, , 106F
那不是愛克斯,是乘號 因此0x90 = 0
12/13 00:43, 106F
我都俗氣的唸 叉...

12/13 01:10, , 107F
其實案外案的問題, 我認為應該應是程式的bug.
12/13 01:10, 107F

12/13 01:11, , 108F
它可能假設資料為ASCII,要轉成Unicode(UCS2),
12/13 01:11, 108F

12/13 01:12, , 109F
但又未慮 char 為 signed char, 因此
12/13 01:12, 109F

12/13 01:13, , 110F
(short)((char)0x87) 就變成了 0xff87
12/13 01:13, 110F

12/13 01:14, , 111F
此時再UCS2轉UTF8, 就變成 0xEF 0xBE 0x87 了.
12/13 01:14, 111F

12/13 01:16, , 112F
應該應是 => 應該是; 未慮 => 未考慮
12/13 01:16, 112F

12/13 01:19, , 113F
(這邊假設 char 為 8bits, short 為 16bits)
12/13 01:19, 113F
一開始不知道這也是符合utf-8 encode 以為是另一套編碼 現在看起來似乎是在string與wstring轉換時 出現這樣的問題 code如下 (有用到boost) using namespace std; using namespace boost; wstring path = L"複製"; //http://ppt.cc/yK88 string path2 = boost::to_utf8(path); //http://ppt.cc/eAm2 wstring path3; path3.assign(path2.begin(), path2.end()); //to log //http://ppt.cc/nQ7b //我猜是上面這行有問題 locale old_locale; locale utf8_locale(old_locale, new boost::program_options::detail::utf8_codecvt_facet); filesystem::wpath asPath(L"C:\\test.log"); wofstream logfile; logfile.imbue(utf8_locale); if(!logfile.is_open()) { logfile.open(asPath.external_file_string().c_str(), ios::in | ios::out | ios::app | ios::ate | ios::binary); } logfile << path3; logfile.close(); 在C:\test.log就會有精美的 EFBFA8EFBEA4EFBE87EFBFA8EFBEA3EFBEBD 了 http://ppt.cc/wEJA ※ 編輯: donkeychen 來自: 210.59.147.226 (12/13 10:12)

12/13 09:50, , 114F
阿......謝謝賜教,不過你們到底多八卦?!
12/13 09:50, 114F

12/13 09:52, , 115F
不要于同學的一直叫,一切都是誤會
12/13 09:52, 115F

12/13 09:53, , 116F
是我技不如人惹到不該惹得人,拜託別傳了
12/13 09:53, 116F

12/13 10:30, , 117F
12/13 10:30, 117F

12/13 11:28, , 118F
原PO的問題Babel Pad完全決解,去玩玩看吧
12/13 11:28, 118F

12/13 14:49, , 119F
大大用Babel Pad開Big5的檔案會亂碼耶
12/13 14:49, 119F

12/14 13:27, , 120F
ANSI格式要在開啟時選語區才可,這不像
12/14 13:27, 120F

12/14 13:29, , 121F
WORD會自動辨別這程式是內定在U碼下運作的
12/14 13:29, 121F

12/14 13:32, , 122F
我所建立的所有CJKV字碼U-8都是用這轉成的
12/14 13:32, 122F

12/14 13:34, , 123F
這程式可讀別家所不可讀的UTF32文件檔
12/14 13:34, 123F

12/14 16:05, , 124F
這不是于同學嗎?還原度可真高啊
12/14 16:05, 124F

12/17 13:54, , 125F
POWERPC大大 感謝:)
12/17 13:54, 125F
文章代碼(AID): #1Ig0mvBp (Programming)
文章代碼(AID): #1Ig0mvBp (Programming)