[請問] 有高效率將大量中文字串轉成HEX的軟

看板EZsoft作者 (沙羅)時間5年前 (2019/01/16 14:42), 5年前編輯推噓9(9033)
留言42則, 7人參與, 5年前最新討論串1/1
我有一些文字檔,裡面都是中文字 每個檔案大約都有100萬行 想要把內容全部轉成UNICODE的HEX 例如「中」變成「4E2D」 這個轉換不困難,但行數高達100萬行左右 是否有每個檔案能在10秒內完成轉換的高效率程式? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 173.213.89.40 ※ 文章網址: https://www.ptt.cc/bbs/EZsoft/M.1547620949.A.DC5.html

01/16 15:19, 5年前 , 1F
10s連檔案都還沒讀完吧?
01/16 15:19, 1F
10s太難的話就改30s吧。希望能盡量快。

01/16 15:34, 5年前 , 2F
轉換完放在RAM跟還要存到硬碟內也不一樣
01/16 15:34, 2F
是要存在硬碟

01/16 15:45, 5年前 , 3F
不對啊,你文字檔原始的編碼格式是啥?
01/16 15:45, 3F
原始編碼為UNICODE

01/16 15:56, 5年前 , 4F
www.di-mgt.com.au/hexdump-for-windows.html
01/16 15:56, 4F
試用後覺得不合用。減為20萬行還是花了以分鐘計算的時間 ※ 編輯: shala (173.213.89.40), 01/16/2019 16:58:52

01/16 17:09, 5年前 , 5F
你是要給人看而不是程式要使用的話,
01/16 17:09, 5F

01/16 17:10, 5年前 , 6F
notepad++就有HEX-EDITOR這個外掛模組了,或者使用
01/16 17:10, 6F

01/16 17:11, 5年前 , 7F
UltraEdit這類編輯器
01/16 17:11, 7F

01/16 17:12, 5年前 , 8F
應該說所有文字編輯器,支援HEX MODE都可以用
01/16 17:12, 8F
謝謝,不過轉換的目的不是要看,而是要給其他程式使用 ※ 編輯: shala (173.213.89.40), 01/16/2019 17:18:47

01/16 17:28, 5年前 , 9F
給其他程式用,不需要轉啊,程式只要可以讀檔案,直接開
01/16 17:28, 9F

01/16 17:29, 5年前 , 10F
檔起來不就是你要的答案了?QQ
01/16 17:29, 10F
說起來有點複雜,總之是需要轉換這一個步驟的。我也希望能省略這一步,但目前還解決 不了QQ ※ 編輯: shala (173.213.89.40), 01/16/2019 18:46:56

01/16 19:12, 5年前 , 11F
感覺就是其他程式不是原PO開發的 且只吃HEX
01/16 19:12, 11F

01/16 19:13, 5年前 , 12F
自己寫程式最快啦 這麼單一又大量的功能 值得寫程式
01/16 19:13, 12F
我有列入未來計畫

01/16 19:40, 5年前 , 13F
還是不太了解,我從文意推測你是用Windows,假設今天你
01/16 19:40, 13F

01/16 19:41, 5年前 , 14F
開了一個記事本,輸入「中」後存檔,編碼選unicode,
01/16 19:41, 14F

01/16 19:42, 5年前 , 15F
實際儲存的資料就是4Bytes: 0xFF 0xFE 0x2D 0x4E
01/16 19:42, 15F

01/16 19:42, 5年前 , 16F
那你希望的這個程式,轉換完以後檔案的raw data是啥呢?
01/16 19:42, 16F

01/16 19:45, 5年前 , 17F
Hex: FF FE 34 00 45 00 32 00 44 00 共10Bytes?
01/16 19:45, 17F
簡單說就是轉換後的文字檔打開是顯示4E2D這個字串。我要把這個字串拿去餵其他程式 ※ 編輯: shala (173.213.89.40), 01/16/2019 20:15:42

01/16 20:14, 5年前 , 18F
每行100中文字 一百萬行 python3.7+ramdisk 40秒
01/16 20:14, 18F
謝謝參考數據,硬碟確實是一個關卡QQ ※ 編輯: shala (173.213.89.40), 01/16/2019 20:18:33

01/16 20:32, 5年前 , 19F
所以4E2D存檔要用什麼編碼?一樣Windows上所謂的unicode
01/16 20:32, 19F

01/16 20:33, 5年前 , 20F
(UCS-2-LE)嗎?還是需要再轉其他編碼?這會影響速度
01/16 20:33, 20F

01/16 20:50, 5年前 , 21F
能不能傳個範例檔來測試測試XD
01/16 20:50, 21F
轉換後的檔案我還是用同一種編碼,檔案略大一點,但就圖個方便。 範例檔...其實用字典生成就很類似了。我的檔案會有一些大五碼以外的中文字。

01/16 21:15, 5年前 , 22F
你有python3嗎?
01/16 21:15, 22F

01/16 21:32, 5年前 , 23F
扣除BOM,檔案大小應該會變4倍
01/16 21:32, 23F
哈哈,我改用UTF-8試試看好了

01/16 23:28, 5年前 , 24F
所以你要餵的那個程式,確定可以吃多種編碼格式?
01/16 23:28, 24F
其實不行,所以真的很想換掉那個程式QQ

01/16 23:28, 5年前 , 25F
你的需求,轉換後若用UTF-8,撇開Windows會加BOM來看,
01/16 23:28, 25F

01/16 23:30, 5年前 , 26F
跟用ASCII編碼是一樣的大小,也與來源檔大小相同
01/16 23:30, 26F

01/17 10:41, 5年前 , 27F
未實測速度 Akelpad + HexSel plugin
01/17 10:41, 27F

01/17 10:46, 5年前 , 28F
剛實測一下有點lag
01/17 10:46, 28F
我再找更好的硬體run看看

01/17 20:18, 5年前 , 29F
試下我寫的 測試30MB文字檔(Unicode)不含讀寫約1秒左右
01/17 20:18, 29F

01/17 20:19, 5年前 , 30F

01/17 20:20, 5年前 , 31F
在命令列模式下使用
01/17 20:20, 31F
感謝,效率提升很有感!是否因為演算法有所改良? 若「不轉換」斷行符號會影響效率嗎?因為轉換後的檔案仍需保持行數不變。

01/18 09:07, 5年前 , 32F
你同一個檔案編碼方式不一致,軟體根本無從判斷啊
01/18 09:07, 32F

01/18 11:55, 5年前 , 33F
用查表法應該是最快了 事先會吃1G的記憶体 理論上可支持
01/18 11:55, 33F

01/18 11:55, 5年前 , 34F
01/18 11:55, 34F

01/18 11:57, 5年前 , 35F
斷行符號會影響一點點效率
01/18 11:57, 35F
感謝!斷行符號不太影響效率的話,可否開發一個保持斷行的版本? 另外我發現您的程式會將字串兩兩對調, 以UTF-8的「一二」為例, 轉換前的HEX:E4 B8 80 E4 BA 8C 轉換後的字串:B8 E4 E4 80 8C BA 能改為以原順序輸出嗎?

01/18 12:52, 5年前 , 36F
Mapping table只需要一個型別uint16_t 大小256的陣列吧?
01/18 12:52, 36F

01/18 12:53, 5年前 , 37F
然後前面講錯,依原PO需求的UCS-2轉UTF-8大小變2倍才對
01/18 12:53, 37F

01/18 16:09, 5年前 , 38F
是256沒錯 另增加字元順序選項http://tinyurl.com/yaaakywe
01/18 16:09, 38F
感謝! 能否再增加不轉換斷行符號的選項?困難的話我自己再加工替換

01/18 16:24, 5年前 , 39F
效率提升的問題應該是因為python本身就不是讓你拚速度
01/18 16:24, 39F

01/18 17:05, 5年前 , 40F
UTF-8沒有BE LE的區別耶...
01/18 17:05, 40F

01/18 17:42, 5年前 , 41F
內定就是不轉換了 還是你要多個選項?不支持Utf8喔
01/18 17:42, 41F
原來如此,我以為也支援UTF8。那沒問題了,非常感謝! ※ 編輯: shala (45.56.160.202), 01/18/2019 19:55:44

01/20 23:39, 5年前 , 42F
你是要存成 source code 喔?vim 的 xxd -i
01/20 23:39, 42F
文章代碼(AID): #1SFj9Lt5 (EZsoft)