[問題] BBS美工圖案檔與Unicode的轉換問題

看板C_and_CPP作者 (霧丸)時間5年前 (2019/04/11 22:05), 5年前編輯推噓3(303)
留言6則, 3人參與, 5年前最新討論串1/2 (看更多)
(為了避免誤導,修正部分內容。) 我正在寫一個處理ANSI檔(.ans)的Windows MFC應用程式, 其目的在於讓使用者能用類似小畫家的方式編輯ANSI美工作品。 目前使用Visual Studio 2017編譯,但並沒有用到任何C#的部分。 由於PCMan支援Unicode補完計畫,要看日文是沒問題的。 但我也不意外地在Unicode、Big5、以及BBS色碼的恩怨情仇中摔了一大跤。 我希望能做到以下兩件事情: 1. 在PCMan的「ANSI編輯」介面中,輸入日文內容。 將檔案存為.ans檔後,在我的程式中打開並編輯。 2. 在我的程式中,輸入日文內容。 將檔案存為.ans檔後,在PCMan的「ANSI編輯」中打開並編輯。 在PCMan的ANSI編輯功能中,如果打入日文字再存檔,會採用Big5編碼。 (很合理,如果用Unicode的話,控制碼會讓你死得很難看) 而我的程式所輸出的.ans檔,也必須採用Big5編碼,否則PCMan也無法讀入。 問題在於,我的程式需要把Big5轉換為Unicode來處理每個字元。 如果只是單純的中英文混合,那用MultiByteToWideChar https://tinyurl.com/y54qkkpd 然後把CodePage設成950就能產生正常的Unicode了。 要把內容寫成Ansi檔,也只是WideCharToMultiByte之類的事情。 碰上日文等不包含在CodePage 950內的符號時,事情就麻煩了。 歷史痕跡告訴我CodePage 951可能有用,但MultiByteToWideChar表示我不認識他。 網路搜尋的結果提到了這個工具: Microsoft Character Code Conversion Routines For HKSCS-2004 https://www.microsoft.com/en-us/download/details.aspx?id=12080 而點開連結也可以發現它早就被拋棄了,當然茫茫網海中或許還撈的到。 請問包含這些字元的Big5 ←→ Unicode之間的轉換, 在C/C++中有沒有什麼正式的轉換方法,還是我漏掉了什麼重要的環節? 由於這個程式只是要方便他人編輯ANSI檔案, 因此只要能轉換「PCMan看得懂且輸出的編碼格式」即可。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.166.44 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1554991515.A.883.html

04/12 00:55, 5年前 , 1F
沒正式的,但可以用別人寫好的library
04/12 00:55, 1F

04/12 01:03, 5年前 , 2F
而且unicode補完好像跟unicode沒關係
04/12 01:03, 2F
我知道所謂的「Unicode補完」其實只是Big5碼的延伸, 但它可以讓使用者看到日文,所以我的程式也必須處理 否則不管是在哪一邊輸入日文,轉成.ans後另外一邊都會看不懂 或是我在考慮…如果能找到表的話,自己寫一個可能比較直接

04/12 14:12, 5年前 , 3F
原來PTT不是用UTF-8喔?
04/12 14:12, 3F
應用程式本身要用UTF-8或Unicode都沒差,也好處理 問題在於.ans檔中的色碼,如果要讓色碼如預期顯示在半個字元上,需要額外處理 雖然可以用一些規則來判斷(如UTF-8中2BYTE以上的字元只要中間有色碼就當他是一半) 但最大的問題是PCMan/PHJCI存下的東西不是UTF-8而是Big5-HKSCS 所以如果我的程式不能翻譯HKSCS,交互使用的體驗就會超級糟糕 如果只是要定義一種「文字內容用Unicode編碼,裡面穿插色碼」的格式 那我在程式裡面自己來就可以了,但這個格式也只有我的程式可以打開 目前往自己轉的方向考慮了,反正也不過是for loop的事情,只是要先找到表...... ※ 編輯: kirimaru73 (118.163.84.235), 04/12/2019 17:45:27

04/14 01:27, 5年前 , 4F
PttBBS 本來就是沿用 199x 年的 MapleBBS 程式碼一直修
04/14 01:27, 4F

04/14 01:28, 5年前 , 5F
改到現在阿,要全面用 UTF-8 的話,光是 asciiart 要用
04/14 01:28, 5F

04/14 01:28, 5年前 , 6F
的一字雙色就是很大的問題了
04/14 01:28, 6F
※ 編輯: kirimaru73 (118.160.164.40), 04/14/2019 19:42:29
文章代碼(AID): #1ShqcRY3 (C_and_CPP)
文章代碼(AID): #1ShqcRY3 (C_and_CPP)