事情起源于这篇文章:https://zhuanlan.zhihu.com/p/2048153732148360825
看完之后我的内心五味杂陈,一方面因为我的部分猜测得到了证实而感到兴奋,一方面又对某组织的某种行为感到愤怒。于是乎便萌生了这个想法。
当然,逆向的第一步还是对可执行文件本身下手。我参考的这篇文章:https://aigcdaily.cn/news/a24vcqol0mvbkgn/。最后顺藤摸瓜下来,发现日文原版可执行文件引用了fnt.pak,汉化版可执行文件引用了fon.pak。
接下来的事情就是……解包! 参考程序:
import numpy as np
import os, subprocess
from PIL import Image
from sys import argv
import chardet
encoding = 'utf-8'
tostr = lambda x: x.decode('shift-jis').strip('\x00')
tohex = lambda x: ''.join(['%02X' % i for i in x[::-1]])
toint = lambda x: int(tohex(x), 16)
fin = argv[1]
fpin = open(fin, 'rb')
magic = toint(fpin.read(4))
outpath = '.'.join(fin.split('.')[:-1])
if magic == 0x5041434B: # PACK
fpin.read(8) # unknown
nentry = toint(fpin.read(4))
os.makedirs(outpath, exist_ok=True)
for i in range(nentry):
fpin.seek(16 + i * 44)
crypted = toint(fpin.read(4))
name = tostr(fpin.read(24))
fpin.read(8) # unknown
offset = toint(fpin.read(4))
size = toint(fpin.read(4))
fpin.seek(offset)
fout = '%s/%s' % (outpath, name)
print(fout, end='')
fpout = open(fout, 'wb')
if size == 0:
fpout.close()
continue
if not crypted:
fpout.write(fpin.read(size))
else:
inceil = toint(fpin.read(4))
outceil = toint(fpin.read(4))
arr = np.zeros(0x1000, dtype=np.uint8)
arr[:0xFEE] = np.ones(0xFEE, dtype=np.uint8) * 0x20
insize, outsize, arr_w = 0, 0, 0xFEE
while insize < inceil and outsize < outceil:
flag = ord(fpin.read(1))
insize += 1
for _ in range(8):
if insize >= inceil or outsize >= outceil:
break
b1 = ord(fpin.read(1))
insize += 1
if not flag & 1:
b2 = ord(fpin.read(1))
insize += 1
arr_r = b1 | (b2 & 0xF0) << 4
counter = (b2 & 0xF) + 3
while counter:
b1 = arr[arr_r & 0xFFF]
arr[arr_w & 0xFFF] = b1
fpout.write(bytes([b1]))
arr_r += 1
arr_w += 1
outsize += 1
counter -= 1
else:
arr[arr_w & 0xFFF] = b1
fpout.write(bytes([b1]))
arr_w += 1
outsize += 1
flag >>= 1
fpout.close()
if fout.endswith('.txt'):
with open(fout, 'rb') as file:
raw_data = file.read(100)
result = chardet.detect(raw_data)
encoding = result['encoding']
print(f"Detected encoding: {encoding}")
with open(fout, 'rb') as src:
with open(fout.replace('.txt', '.tmp'), 'wb') as dest:
dest.write(src.read())
os.remove(fout)
os.rename(fout.replace('.txt', '.tmp'), fout)
print(' (Converted to UTF-8)', end='')
if fout.endswith('.bmp') or fout.endswith('.tga'):
try:
Image.open(fout).save(fout[:-4]+'.png')
print(' (Converted to PNG)', end='')
os.remove(fout)
except ValueError as e:
print(" (Cannot convert to PNG): ", e)
pass
print()
elif magic == 0x0043414C: # LAC0
nentry = toint(fpin.read(4))
os.makedirs(outpath, exist_ok=True)
for i in range(nentry):
fpin.seek(8 + i * 40)
name = tohex(fpin.read(32)).strip('0')
size = toint(fpin.read(4))
offset = toint(fpin.read(4))
fpin.seek(offset)
fout = '%s/%s' % (outpath, name)
header = toint(fpin.read(4))
if header == 0x5367674F:
fout += '.ogg'
elif header == 0x46464952:
fout += '.wav'
else:
print('WARNING: Unrecognized audio format')
print(fout)
fpin.seek(offset)
fpout = open(fout, 'wb')
fpout.write(fpin.read(size))
fpout.close()
elif magic == 0x75B22630: # TMPG
assert toint(fpin.read(12)) == 0x6CCE6200AA00D9A611CF668E
command = 'ffmpeg -i %s %s.mp4' % (fin, outpath)
process = subprocess.Popen(command, shell=True)
process.wait()
else:
print('Invalid magic number')
exit(1)
fpin.close()
解包完后,注意到一个名为“本体80.tga“的文件,这便是字库文件。
(fnt.pak/本体80.png)(fon.pak/本体80.png)(为什么图片上传会失败啊.png)(有谁能修一下吗.png)
仔细一比对就能发现,两张字库中相同位置的字符,其 Shift JIS 码是一一对应的。如:WA2第一个字为“啊”,如果将从ck-gal.pak中的txt直接转utf-8的话,第一个字会是“暁”
当然,这个80x96的字库文件我们不可能人肉打出对应。于是乎,我们就要祭出一个大杀器……OCR!
有了OCR识别结果还不够,因为OCR可能会犯一些奇奇怪怪的错误。这个时候,我们就要进行耗时最长,也是最痛苦的阶段:人工检查。
(由于这个过程过于痛苦,我不想让其他人再次经历这个折磨,所以我就不放出相关代码了)
最后,我们就可以得到一张Shift JIS转中文的映射表:
{"8940":"仍","8941":"从","8942":"仓","8943":"仔","8944":"仕","8945":"他","8946":"仗","8947":"付","8948":"仙","8949":"代","8950":"件","8951":"价","8952":"任","8953":"份","8954":"仿","8955":"企","8956":"伊","8957":"伍","8958":"伏","8959":"伐","8960":"伟","8961":"传","8962":"伤","8963":"伦","8964":"伪","8965":"伫","8966":"伯","8967":"估","8968":"伴","8969":"伶","8970":"住","8971":"佐","8972":"佑","8973":"体","8974":"何","8975":"余","8976":"佛","8977":"作","8978":"你","8979":"佣","8980":"侃","8981":"侈","8982":"例","8983":"侍","8984":"供","8985":"依","8986":"侣","8987":"侥","8988":"侧","8989":"侮","8990":"俄","8991":"俊","8992":"俏","8993":"俐","8994":"俑","8995":"俗","8996":"俘","8997":"保","8998":"信","8999":"俩","9040":"掏","9041":"掐","9042":"排","9043":"掖","9044":"掘","9045":"掠","9046":"探","9047":"接","9048":"控","9049":"推","9050":"揉","9051":"揍","9052":"描","9053":"提","9054":"插","9055":"握","9056":"揣","9057":"揪","9058":"揭","9059":"援","9060":"搏","9061":"搐","9062":"搓","9063":"搔","9064":"搜","9065":"搞","9066":"搪","9067":"搬","9068":"搭","9069":"携","9070":"摔","9071":"摘","9072":"摧","9073":"摩","9074":"摸","9075":"撂","9076":"撅","9077":"撇","9078":"撑","9079":"撒","9080":"撰","9081":"撵","9082":"撷","9083":"撼","9084":"擅","9085":"操","9086":"擎","9087":"擦","9088":"攀","9089":"攒","9090":"放","9091":"政","9092":"故","9093":"效","9094":"敌","9095":"敏","9096":"救","9097":"教","9098":"敛","9099":"敝","9140":"朋","9141":"服","9142":"朔","9143":"朗","9144":"望","9145":"朝","9146":"期","9147":"朦","9148":"木","9149":"未","9150":"朵","9151":"机","9152":"朽","9153":"杀","9154":"杂","9155":"权","9156":"杆","9157":"杉","9158":"李","9159":"材","9160":"来","9161":"杯","9162":"杰","9163":"東","9164":"杵","9165":"松","9166":"板","9167":"极","9168":"构","9169":"枉","9170":"枪","9171":"枯","9172":"架","9173":"枷","9174":"柄","9175":"柏","9176":"某","9177":"柑","9178":"染","9179":"柔","9180":"标","9181":"栋","9182":"栏","9183":"树","9184":"栓","9185":"栖","9186":"栗","9187":"校","9188":"株","9189":"样","9190":"案","9191":"桌","9192":"桑","9193":"桓","9194":"档","9195":"桥","9196":"桶","9197":"梁","9198":"梅","9199":"梆","9240":"水","9241":"永","9242":"汁","9243":"求","9244":"汇","9245":"汉","9246":"汗","9247":"江","9248":"池","9249":"污","9250":"沁","9251":"沉","9252":"沐","9253":"沓","9254":"沙","9255":"沛","9256":"沟","9257":"没","9258":"沢","9259":"沥","9260":"油","9261":"治","9262":"沼","9263":"沾","9264":"沿","9265":"泄","9266":"泉","9267":"泌","9268":"法","9269":"泛","9270":"泪","9271":"泫","9272":"泰","9273":"泳","9274":"泻","9275":"泼","9276":"泽","9277":"洁","9278":"洋","9279":"洒","9280":"活","9281":"洽","9282":"派","9283":"流","9284":"浃","9285":"浅","9286":"浆","9287":"浇","9288":"浊","9289":"测","9290":"浩","9291":"浪","9292":"浮","9293":"浴","9294":"海","9295":"浸","9296":"涂","9297":"消","9298":"涉","9299":"涌","9340":"灯","9341":"灰","9342":"灵","9343":"灶","9344":"灼","9345":"灾","9346":"灿","9347":"炉","9348":"炊","9349":"炎","9350":"炸","9351":"点","9352":"炼","9353":"炽","9354":"烁","9355":"烂","9356":"烈","9357":"烊","9358":"烘","9359":"烙","9360":"烫","9361":"烬","9362":"热","9363":"烹","9364":"焉","9365":"焕","9366":"焚","9367":"焦","9368":"焰","9369":"然","9370":"煲","9371":"煽","9372":"熄","9373":"熊","9374":"熏","9375":"熔","9376":"熟","9377":"熠","9378":"熬","9379":"熱","9380":"爱","9381":"爵","9382":"父","9383":"爷","9384":"爸","9385":"爹","9386":"爽","9387":"片","9388":"版","9389":"牌","9390":"牲","9391":"牵","9392":"湯","9393":"特","9394":"牺","9395":"犀","9396":"犊","9397":"犒","9398":"犟","9399":"犬","9440":"疼","9441":"疾","9442":"痂","9443":"病","9444":"症","9445":"痉","9446":"痊","9447":"痒","9448":"痕","9449":"痛","9450":"瘦","9451":"瘩","9452":"瘪","9453":"瘫","9454":"瘾","9455":"癌","9456":"癖","9457":"癫","9458":"登","9459":"白","9460":"皑","9461":"皙","9462":"皮","9463":"皱","9464":"盂","9465":"盆","9466":"盈","9467":"益","9468":"盎","9469":"盏","9470":"盛","9471":"盟","9472":"盥","9473":"目","9474":"盯","9475":"盲","9476":"直","9477":"相","9478":"盹","9479":"盼","9480":"眠","9481":"眨","9482":"眩","9483":"眯","9484":"眶","9485":"眷","9486":"眸","9487":"眺","9488":"眼","9489":"着","9490":"睦","9491":"睫","9492":"睬","9493":"睹","9494":"睽","9495":"睾","9496":"瞄","9497":"瞅","9498":"瞌","9499":"瞎","9540":"空","9541":"穿","9542":"突","9543":"窃","9544":"窄","9545":"窍","9546":"窒","9547":"窗","9548":"窘","9549":"窜","9550":"竞","9551":"竟","9552":"章","9553":"童","9554":"竭","9555":"端","9556":"竹","9557":"竿","9558":"笃","9559":"笋","9560":"笹","9561":"笺","9562":"笼","9563":"等","9564":"筋","9565":"筐","9566":"筑","9567":"筒","9568":"答","9569":"策","9570":"箍","9571":"算","9572":"管","9573":"箭","9574":"箱","9575":"節","9576":"篇","9577":"篓","9578":"篮","9579":"篷","9580":"粉","9581":"粒","9582":"粗","9583":"粘","9584":"粥","9585":"粪","9586":"粮","9587":"粱","9588":"粲","9589":"粹","9590":"糙","9591":"糟","9592":"系","9593":"紊","9594":"純","9595":"素","9596":"索","9597":"紧","9598":"紫","9599":"累","9640":"羁","9641":"羊","9642":"美","9643":"羚","9644":"羞","9645":"羡","9646":"群","9647":"義","9648":"羹","9649":"羽","9650":"翰","9651":"翱","9652":"翻","9653":"翼","9654":"耀","9655":"老","9656":"考","9657":"者","9658":"而","9659":"耍","9660":"耸","9661":"耻","9662":"耽","9663":"耿","9664":"聆","9665":"聊","9666":"聋","9667":"职","9668":"联","9669":"聘","9670":"肋","9671":"肌","9672":"肖","9673":"肘","9674":"肚","9675":"肝","9676":"肠","9677":"股","9678":"肢","9679":"肤","9680":"肴","9681":"肺","9682":"肿","9683":"胀","9684":"胁","9685":"胃","9686":"胆","9687":"背","9688":"胎","9689":"胖","9690":"胳","9691":"胶","9692":"胸","9693":"能","9694":"脂","9695":"脆","9696":"脇","9697":"脈","9698":"脉","9699":"脊","9740":"草","9741":"荐","9742":"荒","9743":"荚","9744":"荞","9745":"荡","9746":"荣","9747":"药","9748":"荷","9749":"荻","9750":"莲","9751":"获","9752":"莽","9753":"菇","9754":"菊","9755":"菌","9756":"菜","9757":"菠","9758":"菩","9759":"華","9760":"萎","9761":"萝","9762":"营","9763":"萦","9764":"萨","9765":"落","9766":"著","9767":"葛","9768":"葡","9769":"董","9770":"蒙","9771":"蒜","9772":"蒸","9773":"蒿","9774":"蓄","9775":"蓝","9776":"蓦","9777":"蓬","9778":"蔑","9779":"蔓","9780":"蕴","9781":"蕾","9782":"薄","9783":"薇","9784":"薪","9785":"薯","9786":"藉","9787":"藏","9788":"藐","9789":"藕","9790":"虐","9791":"虑","9792":"虔","9793":"虚","9794":"虫","9795":"虹","9796":"虽","9797":"蚀","9798":"蚁","9799":"蚂","9840":"讲","9841":"讳","9842":"讴","9843":"讶","9844":"许","9845":"讹","9846":"论","9847":"讽","9848":"设","9849":"访","9850":"诉","9851":"诊","9852":"词","9853":"译","9854":"试","9855":"诗","9856":"诙","9857":"诚","9858":"话","9859":"诞","9860":"诨","9861":"诫","9862":"语","9863":"误","9864":"诱","9865":"诲","9866":"说","9867":"诵","9868":"诶","9869":"请","9870":"谁","9871":"调","9872":"谄","9940":"跳","9941":"践","9942":"踉","9943":"踌","9944":"踏","9945":"踝","9946":"踟","9947":"踢","9948":"踩","9949":"踪","9950":"蹈","9951":"蹋","9952":"蹑","9953":"蹒","9954":"蹙","9955":"蹦","9956":"蹩","9957":"蹬","9958":"蹭","9959":"蹰","9960":"身","9961":"躬","9962":"躯","9963":"躲","9964":"躺","9965":"車","9966":"輩","9967":"车","9968":"轨","9969":"转","9970":"载","9971":"较","9972":"辄","9973":"辅","9974":"辆","9975":"辈","9976":"辉","9977":"辍","9978":"辐","9979":"辑","9980":"辞","9981":"辟","9982":"辣","9983":"辨","9984":"辩","9985":"辫","9986":"辰","9987":"辱","9988":"边","9989":"辻","9990":"迈","9991":"迎","9992":"运","9993":"近","9994":"返","9995":"还","9996":"这","9997":"进","9998":"远","9999":"违","889F":"一","88A0":"丁","88A1":"七","88A2":"万","88A3":"丈","88A4":"三","88A5":"上","88A6":"下","88A7":"不","88A8":"与","88A9":"丑","88AA":"专","88AB":"且","88AC":"世","88AD":"丘","88AE":"业","88AF":"丛","88B0":"东","88B1":"丝","88B2":"丟","88B3":"两","88B4":"严","88B5":"丧","88B6":"个","88B7":"丫","88B8":"中","88B9":"丰","88BA":"串","88BB":"临","88BC":"丸","88BD":"为","88BE":"主","88BF":"丽","88C0":"举","88C1":"乃","88C2":"久","88C3":"么","88C4":"义","88C5":"之","88C6":"乌","88C7":"乍","88C8":"乎","88C9":"乏","88CA":"乐","88CB":"乒","88CC":"乓","88CD":"乔","88CE":"乖","88CF":"乘","88D0":"乙","88D1":"九","88D2":"乞","88D3":"也","88D4":"习","88D5":"乡","88D6":"书","88D7":"买","88D8":"乱","88D9":"乳","88DA":"了","88DB":"予","88DC":"争","88DD":"事","88DE":"二","88DF":"于","88E0":"亏","88E1":"云","88E2":"互","88E3":"五","88E4":"井","88E5":"亘","88E6":"亚","88E7":"些","88E8":"亜","88E9":"亡","88EA":"亢","88EB":"交","88EC":"亦","88ED":"产","88EE":"享","88EF":"京","88F0":"亭","88F1":"亮","88F2":"亲","88F3":"亵","88F4":"人","88F5":"亿","88F6":"什","88F7":"仁","88F8":"仅","88F9":"仆","88FA":"仇","88FB":"今","88FC":"介","894A":"令","894B":"以","894C":"仪","894D":"们","894E":"仰","894F":"仲","895A":"休","895B":"众","895C":"优","895D":"伙","895E":"会","895F":"伞","896A":"伸","896B":"伺","896C":"似","896D":"但","896E":"位","896F":"低","897A":"佩","897B":"佯","897C":"佳","897D":"佻","897E":"佼","897F":"使","898A":"侯","898B":"侵","898C":"煙","898D":"便","898E":"係","898F":"促","899A":"俭","899B":"修","899C":"俯","899D":"俱","899E":"俺","899F":"倍","89A0":"倒","89A1":"倔","89A2":"倘","89A3":"候","89A4":"倚","89A5":"借","89A6":"倦","89A7":"倪","89A8":"值","89A9":"倾","89AA":"偃","89AB":"假","89AC":"偎","89AD":"偏","89AE":"做","89AF":"停","89B0":"健","89B1":"偶","89B2":"偷","89B3":"偿","89B4":"傅","89B5":"傍","89B6":"備","89B7":"储","89B8":"催","89B9":"傲","89BA":"傻","89BB":"像","89BC":"僚","89BD":"僧","89BE":"僵","89BF":"僻","89C0":"儿","89C1":"兀","89C2":"允","89C3":"元","89C4":"充","89C5":"兆","89C6":"先","89C7":"光","89C8":"克","89C9":"免","89CA":"兑","89CB":"兔","89CC":"党","89CD":"兜","89CE":"兢","89CF":"入","89D0":"全","89D1":"八","89D2":"公","89D3":"六","89D4":"兮","89D5":"兰","89D6":"共","89D7":"关","89D8":"兴","89D9":"兵","89DA":"其","89DB":"具","89DC":"典","89DD":"养","89DE":"兼","89DF":"兽","89E0":"冀","89E1":"内","89E2":"円","89E3":"冈","89E4":"册","89E5":"再","89E6":"冒","89E7":"冕","89E8":"冗","89E9":"写","89EA":"军","89EB":"农","89EC":"冠","89ED":"冢","89EE":"冤","89EF":"冥","89F0":"冬","89F1":"冰","89F2":"冲","89F3":"决","89F4":"冴","89F5":"况","89F6":"冶","89F7":"冷","89F8":"冻","89F9":"冽","89FA":"净","89FB":"凄","89FC":"准","8A40":"凇","8A41":"凉","8A42":"凋","8A43":"凌","8A44":"减","8A45":"凑","8A46":"凛","8A47":"凝","8A48":"几","8A49":"凡","8A4A":"凤","8A4B":"凭","8A4C":"凯","8A4D":"凳","8A4E":"凶","8A4F":"凸","8A50":"凹","8A51":"出","8A52":"击","8A53":"函","8A54":"凿","8A55":"刀","8A56":"刁","8A57":"刃","8A58":"分","8A59":"切","8A5A":"刊","8A5B":"刑","8A5C":"划","8A5D":"列","8A5E":"刘","8A5F":"则","8A60":"刚","8A61":"创","8A62":"初","8A63":"删","8A64":"判","8A65":"別","8A66":"刨","8A67":"利","8A68":"别","8A69":"刮","8A6A":"到","8A6B":"制","8A6C":"刷","8A6D":"券","8A6E":"刹","8A6F":"刺","8A70":"刻","8A71":"剂","8A72":"剃","8A73":"削","8A74":"前","8A75":"剐","8A76":"剑","8A77":"剔","8A78":"剜","8A79":"剥","8A7A":"剧","8A7B":"剩","8A7C":"剪","8A7D":"副","8A7E":"割","8A7F":"剽","8A80":"劇","8A81":"劈","8A82":"力","8A83":"劝","8A84":"办","8A85":"功","8A86":"加","8A87":"务","8A88":"劣","8A89":"动","8A8A":"助","8A8B":"努","8A8C":"励","8A8D":"劲","8A8E":"劳","8A8F":"効","8A90":"劾","8A91":"势","8A92":"勃","8A93":"勇","8A94":"勉","8A95":"勋","8A96":"勒","8A97":"務","8A98":"勤","8A99":"勺","8A9A":"勾","8A9B":"匀","8A9C":"包","8A9D":"匆","8A9E":"化","8A9F":"北","8AA0":"匙","8AA1":"匠","8AA2":"匪","8AA3":"匮","8AA4":"匹","8AA5":"区","8AA6":"医","8AA7":"匿","8AA8":"十","8AA9":"千","8AAA":"升","8AAB":"午","8AAC":"半","8AAD":"华","8AAE":"协","8AAF":"卑","8AB0":"卓","8AB1":"单","8AB2":"卖","8AB3":"南","8AB4":"博","8AB5":"卜","8AB6":"卟","8AB7":"占","8AB8":"卡","8AB9":"卢","8ABA":"卦","8ABB":"卧","8ABC":"卫","8ABD":"卯","8ABE":"印","8ABF":"危","8AC0":"即","8AC1":"却","8AC2":"卷","8AC3":"卸","8AC4":"卿","8AC5":"厂","8AC6":"厄","8AC7":"厅","8AC8":"历","8AC9":"厉","8ACA":"压","8ACB":"厌","8ACC":"厕","8ACD":"厘","8ACE":"厚","8ACF":"原","8AD0":"厢","8AD1":"厥","8AD2":"厦","8AD3":"厨","8AD4":"厮","8AD5":"去","8AD6":"县","8AD7":"参","8AD8":"又","8AD9":"叉","8ADA":"及","8ADB":"友","8ADC":"双","8ADD":"反","8ADE":"发","8ADF":"叔","8AE0":"取","8AE1":"受","8AE2":"变","8AE3":"叙","8AE4":"叛","8AE5":"叠","8AE6":"口","8AE7":"古","8AE8":"句","8AE9":"另","8AEA":"叨","8AEB":"叩","8AEC":"只","8AED":"叫","8AEE":"召","8AEF":"叮","8AF0":"可","8AF1":"台","8AF2":"叱","8AF3":"史","8AF4":"右","8AF5":"叵","8AF6":"叶","8AF7":"号","8AF8":"司","8AF9":"叹","8AFA":"叻","8AFB":"叽","8AFC":"吁","8B40":"吃","8B41":"各","8B42":"合","8B43":"吉","8B44":"吊","8B45":"同","8B46":"名","8B47":"后","8B48":"吐","8B49":"向","8B4A":"吓","8B4B":"吕","8B4C":"吗","8B4D":"君","8B4E":"吝","8B4F":"吞","8B50":"吟","8B51":"否","8B52":"吧","8B53":"吩","8B54":"含","8B55":"听","8B56":"吭","8B57":"吮","8B58":"启","8B59":"吱","8B5A":"吵","8B5B":"吸","8B5C":"吹","8B5D":"吻","8B5E":"吼","8B5F":"吾","8B60":"呀","8B61":"呂","8B62":"呃","8B63":"呆","8B64":"呈","8B65":"告","8B66":"呐","8B67":"呓","8B68":"呕","8B69":"呗","8B6A":"员","8B6B":"呛","8B6C":"呜","8B6D":"呢","8B6E":"呣","8B6F":"呦","8B70":"周","8B71":"味","8B72":"呵","8B73":"呻","8B74":"呼","8B75":"命","8B76":"呿","8B77":"咀","8B78":"咂","8B79":"咄","8B7A":"咆","8B7B":"咋","8B7C":"和","8B7D":"咎","8B7E":"咏","8B7F":"咐","8B80":"咒","8B81":"咔","8B82":"咕","8B83":"咖","8B84":"咙","8B85":"咚","8B86":"咛","8B87":"咝","8B88":"咤","8B89":"咦","8B8A":"咧","8B8B":"咨","8B8C":"咪","8B8D":"咫","8B8E":"咬","8B8F":"咯","8B90":"咱","8B91":"咲","8B92":"咳","8B93":"咸","8B94":"咻","8B95":"咽","8B96":"咿","8B97":"哀","8B98":"品","8B99":"哄","8B9A":"哆","8B9B":"哇","8B9C":"哈","8B9D":"哉","8B9E":"响","8B9F":"哎","8BA0":"哑","8BA1":"哒","8BA2":"哔","8BA3":"哗","8BA4":"哝","8BA5":"哟","8BA6":"員","8BA7":"哥","8BA8":"哦","8BA9":"哧","8BAA":"哨","8BAB":"哩","8BAC":"哪","8BAD":"哭","8BAE":"哮","8BAF":"哲","8BB0":"哼","8BB1":"哽","8BB2":"唆","8BB3":"唇","8BB4":"唉","8BB5":"唏","8BB6":"唐","8BB7":"唔","8BB8":"唠","8BB9":"唤","8BBA":"唧","8BBB":"唬","8BBC":"售","8BBD":"唯","8BBE":"唰","8BBF":"唱","8BC0":"唷","8BC1":"唾","8BC2":"啃","8BC3":"啄","8BC4":"商","8BC5":"啊","8BC6":"啕","8BC7":"啜","8BC8":"啡","8BC9":"啤","8BCA":"啥","8BCB":"啦","8BCC":"啧","8BCD":"啪","8BCE":"啬","8BCF":"啮","8BD0":"啰","8BD1":"啵","8BD2":"啸","8BD3":"啼","8BD4":"啾","8BD5":"喀","8BD6":"喂","8BD7":"喃","8BD8":"善","8BD9":"喉","8BDA":"喊","8BDB":"喋","8BDC":"喏","8BDD":"喔","8BDE":"喘","8BDF":"喜","8BE0":"喝","8BE1":"喧","8BE2":"喱","8BE3":"喳","8BE4":"喵","8BE5":"喷","8BE6":"喻","8BE7":"喽","8BE8":"嗄","8BE9":"嗅","8BEA":"嗒","8BEB":"嗓","8BEC":"嗔","8BED":"嗜","8BEE":"嗟","8BEF":"嗤","8BF0":"嗦","8BF1":"嗫","8BF2":"嗬","8BF3":"嗯","8BF4":"嗽","8BF5":"嘀","8BF6":"嘈","8BF7":"嘉","8BF8":"嘎","8BF9":"嘘","8BFA":"嘚","8BFB":"嘛","8BFC":"嘞","8C40":"嘟","8C41":"嘭","8C42":"嘱","8C43":"嘲","8C44":"嘴","8C45":"嘶","8C46":"嘻","8C47":"嘿","8C48":"噌","8C49":"噎","8C4A":"噗","8C4B":"噙","8C4C":"噜","8C4D":"噢","8C4E":"器","8C4F":"噩","8C50":"噪","8C51":"噫","8C52":"噬","8C53":"噱","8C54":"噶","8C55":"嚎","8C56":"嚏","8C57":"嚓","8C58":"嚣","8C59":"嚯","8C5A":"嚷","8C5B":"嚼","8C5C":"囊","8C5D":"囔","8C5E":"囚","8C5F":"四","8C60":"回","8C61":"因","8C62":"团","8C63":"団","8C64":"囤","8C65":"囧","8C66":"园","8C67":"困","8C68":"围","8C69":"固","8C6A":"国","8C6B":"图","8C6C":"圆","8C6D":"圈","8C6E":"園","8C6F":"土","8C70":"圣","8C71":"圧","8C72":"在","8C73":"圭","8C74":"地","8C75":"场","8C76":"圾","8C77":"址","8C78":"坂","8C79":"均","8C7A":"坎","8C7B":"坏","8C7C":"坐","8C7D":"坑","8C7E":"块","8C7F":"坚","8C80":"坛","8C81":"坝","8C82":"坞","8C83":"坟","8C84":"坠","8C85":"坡","8C86":"坦","8C87":"坪","8C88":"垂","8C89":"垃","8C8A":"型","8C8B":"垒","8C8C":"垢","8C8D":"垣","8C8E":"垫","8C8F":"垮","8C90":"埃","8C91":"埋","8C92":"城","8C93":"域","8C94":"培","8C95":"基","8C96":"堀","8C97":"堂","8C98":"堆","8C99":"堕","8C9A":"堡","8C9B":"堤","8C9C":"堪","8C9D":"堵","8C9E":"塌","8C9F":"塑","8CA0":"塔","8CA1":"塚","8CA2":"塞","8CA3":"填","8CA4":"塾","8CA5":"境","8CA6":"墅","8CA7":"墓","8CA8":"増","8CA9":"墙","8CAA":"增","8CAB":"墟","8CAC":"墨","8CAD":"壁","8CAE":"壑","8CAF":"壤","8CB0":"士","8CB1":"壮","8CB2":"声","8CB3":"壳","8CB4":"壶","8CB5":"处","8CB6":"备","8CB7":"复","8CB8":"夏","8CB9":"夕","8CBA":"外","8CBB":"夙","8CBC":"多","8CBD":"夜","8CBE":"够","8CBF":"大","8CC0":"天","8CC1":"太","8CC2":"夫","8CC3":"夭","8CC4":"央","8CC5":"失","8CC6":"头","8CC7":"夷","8CC8":"夸","8CC9":"夹","8CCA":"夺","8CCB":"奄","8CCC":"奇","8CCD":"奈","8CCE":"奉","8CCF":"奋","8CD0":"奎","8CD1":"奏","8CD2":"契","8CD3":"奔","8CD4":"奖","8CD5":"套","8CD6":"奚","8CD7":"奠","8CD8":"奢","8CD9":"奥","8CDA":"女","8CDB":"奴","8CDC":"奶","8CDD":"奸","8CDE":"她","8CDF":"好","8CE0":"如","8CE1":"妄","8CE2":"妆","8CE3":"妇","8CE4":"妈","8CE5":"妊","8CE6":"妒","8CE7":"妖","8CE8":"妙","8CE9":"妥","8CEA":"妨","8CEB":"妩","8CEC":"妹","8CED":"妻","8CEE":"姆","8CEF":"始","8CF0":"姐","8CF1":"姑","8CF2":"姓","8CF3":"委","8CF4":"姗","8CF5":"姜","8CF6":"姨","8CF7":"姬","8CF8":"姻","8CF9":"姿","8CFA":"威","8CFB":"娃","8CFC":"娇","8D40":"娑","8D41":"娘","8D42":"娠","8D43":"娱","8D44":"娴","8D45":"娶","8D46":"婆","8D47":"婉","8D48":"婊","8D49":"婚","8D4A":"婪","8D4B":"婴","8D4C":"婶","8D4D":"媒","8D4E":"媚","8D4F":"媲","8D50":"媾","8D51":"嫁","8D52":"嫉","8D53":"嫌","8D54":"嫡","8D55":"嫩","8D56":"嬉","8D57":"子","8D58":"孑","8D59":"孔","8D5A":"孕","8D5B":"字","8D5C":"存","8D5D":"孙","8D5E":"孜","8D5F":"孝","8D60":"孟","8D61":"季","8D62":"孤","8D63":"学","8D64":"孩","8D65":"孱","8D66":"孽","8D67":"宁","8D68":"它","8D69":"宅","8D6A":"宇","8D6B":"守","8D6C":"安","8D6D":"完","8D6E":"宏","8D6F":"宕","8D70":"宗","8D71":"官","8D72":"宙","8D73":"定","8D74":"宛","8D75":"宜","8D76":"宝","8D77":"实","8D78":"宠","8D79":"审","8D7A":"客","8D7B":"宣","8D7C":"室","8D7D":"宪","8D7E":"宫","8D7F":"宮","8D80":"宰","8D81":"害","8D82":"宴","8D83":"宵","8D84":"家","8D85":"容","8D86":"宽","8D87":"宾","8D88":"宿","8D89":"寂","8D8A":"寄","8D8B":"密","8D8C":"富","8D8D":"寐","8D8E":"寒","8D8F":"寓","8D90":"寝","8D91":"寞","8D92":"察","8D93":"寡","8D94":"寥","8D95":"寨","8D96":"寸","8D97":"对","8D98":"寺","8D99":"寻","8D9A":"导","8D9B":"対","8D9C":"寿","8D9D":"封","8D9E":"射","8D9F":"将","8DA0":"尊","8DA1":"小","8DA2":"少","8DA3":"尔","8DA4":"尖","8DA5":"尘","8DA6":"尚","8DA7":"尝","8DA8":"尤","8DA9":"尬","8DAA":"就","8DAB":"尴","8DAC":"尸","8DAD":"尹","8DAE":"尺","8DAF":"尻","8DB0":"尼","8DB1":"尽","8DB2":"尾","8DB3":"尿","8DB4":"局","8DB5":"屁","8DB6":"层","8DB7":"居","8DB8":"屈","8DB9":"屉","8DBA":"届","8DBB":"屋","8DBC":"屏","8DBD":"屑","8DBE":"展","8DBF":"属","8DC0":"履","8DC1":"屯","8DC2":"山","8DC3":"岁","8DC4":"岂","8DC5":"岌","8DC6":"岔","8DC7":"岗","8DC8":"岛","8DC9":"岡","8DCA":"岩","8DCB":"岭","8DCC":"岳","8DCD":"岸","8DCE":"峙","8DCF":"峭","8DD0":"峰","8DD1":"峻","8DD2":"崇","8DD3":"崎","8DD4":"崖","8DD5":"崛","8DD6":"崩","8DD7":"崭","8DD8":"嵌","8DD9":"巅","8DDA":"川","8DDB":"州","8DDC":"巡","8DDD":"巢","8DDE":"工","8DDF":"左","8DE0":"巧","8DE1":"巨","8DE2":"巩","8DE3":"差","8DE4":"己","8DE5":"已","8DE6":"巴","8DE7":"巷","8DE8":"巾","8DE9":"币","8DEA":"市","8DEB":"布","8DEC":"帅","8DED":"帆","8DEE":"师","8DEF":"希","8DF0":"帐","8DF1":"帕","8DF2":"帖","8DF3":"帘","8DF4":"帝","8DF5":"带","8DF6":"席","8DF7":"帮","8DF8":"帷","8DF9":"常","8DFA":"帽","8DFB":"幄","8DFC":"幅","8E40":"幌","8E41":"幕","8E42":"幡","8E43":"幢","8E44":"干","8E45":"平","8E46":"年","8E47":"并","8E48":"幸","8E49":"幻","8E4A":"幼","8E4B":"幽","8E4C":"广","8E4D":"庁","8E4E":"庄","8E4F":"庆","8E50":"庇","8E51":"床","8E52":"序","8E53":"庐","8E54":"库","8E55":"应","8E56":"底","8E57":"店","8E58":"庞","8E59":"废","8E5A":"度","8E5B":"座","8E5C":"庭","8E5D":"庶","8E5E":"康","8E5F":"庸","8E60":"廉","8E61":"廊","8E62":"廓","8E63":"延","8E64":"建","8E65":"开","8E66":"异","8E67":"弃","8E68":"弄","8E69":"弊","8E6A":"式","8E6B":"弓","8E6C":"引","8E6D":"弗","8E6E":"弛","8E6F":"弟","8E70":"张","8E71":"弥","8E72":"弦","8E73":"弭","8E74":"弯","8E75":"弱","8E76":"弹","8E77":"强","8E78":"弾","8E79":"归","8E7A":"当","8E7B":"录","8E7C":"彗","8E7D":"形","8E7E":"彦","8E7F":"彩","8E80":"彰","8E81":"影","8E82":"彷","8E83":"役","8E84":"彻","8E85":"彼","8E86":"往","8E87":"征","8E88":"径","8E89":"待","8E8A":"很","8E8B":"徊","8E8C":"律","8E8D":"徐","8E8E":"徒","8E8F":"従","8E90":"得","8E91":"徘","8E92":"御","8E93":"徨","8E94":"循","8E95":"微","8E96":"德","8E97":"徽","8E98":"心","8E99":"必","8E9A":"忆","8E9B":"忌","8E9C":"忍","8E9D":"忏","8E9E":"忒","8E9F":"志","8EA0":"忘","8EA1":"忙","8EA2":"忠","8EA3":"忡","8EA4":"忧","8EA5":"忪","8EA6":"快","8EA7":"念","8EA8":"忸","8EA9":"忽","8EAA":"怀","8EAB":"态","8EAC":"怂","8EAD":"怃","8EAE":"怄","8EAF":"怎","8EB0":"怒","8EB1":"怕","8EB2":"怖","8EB3":"怜","8EB4":"思","8EB5":"怠","8EB6":"怡","8EB7":"急","8EB8":"性","8EB9":"怨","8EBA":"怩","8EBB":"怪","8EBC":"怯","8EBD":"总","8EBE":"恋","8EBF":"恍","8EC0":"恐","8EC1":"恒","8EC2":"恕","8EC3":"恙","8EC4":"恢","8EC5":"恤","8EC6":"恨","8EC7":"恩","8EC8":"恬","8EC9":"恭","8ECA":"息","8ECB":"恰","8ECC":"恳","8ECD":"恶","8ECE":"恸","8ECF":"恼","8ED0":"恿","8ED1":"悄","8ED2":"悉","8ED3":"悍","8ED4":"悔","8ED5":"悖","8ED6":"悚","8ED7":"悟","8ED8":"悠","8ED9":"患","8EDA":"悦","8EDB":"您","8EDC":"悩","8EDD":"悬","8EDE":"悯","8EDF":"悲","8EE0":"悴","8EE1":"悸","8EE2":"情","8EE3":"惊","8EE4":"惋","8EE5":"惑","8EE6":"惕","8EE7":"惘","8EE8":"惚","8EE9":"惜","8EEA":"惟","8EEB":"惠","8EEC":"惦","8EED":"惧","8EEE":"惨","8EEF":"惩","8EF0":"惫","8EF1":"愜","8EF2":"惭","8EF3":"惮","8EF4":"惯","8EF5":"惰","8EF6":"想","8EF7":"惴","8EF8":"惶","8EF9":"惹","8EFA":"惺","8EFB":"愁","8EFC":"愈","8F40":"愉","8F41":"意","8F42":"愕","8F43":"愚","8F44":"感","8F45":"愣","8F46":"愤","8F47":"愧","8F48":"愿","8F49":"慈","8F4A":"慌","8F4B":"慎","8F4C":"慕","8F4D":"慢","8F4E":"慧","8F4F":"慨","8F50":"慰","8F51":"慵","8F52":"慷","8F53":"憋","8F54":"憎","8F55":"憔","8F56":"憧","8F57":"憩","8F58":"憬","8F59":"憾","8F5A":"懂","8F5B":"懈","8F5C":"懊","8F5D":"懑","8F5E":"懒","8F5F":"懦","8F60":"懵","8F61":"戏","8F62":"成","8F63":"我","8F64":"戒","8F65":"或","8F66":"战","8F67":"戚","8F68":"戛","8F69":"截","8F6A":"戮","8F6B":"戳","8F6C":"戴","8F6D":"户","8F6E":"戾","8F6F":"房","8F70":"所","8F71":"扁","8F72":"扇","8F73":"扉","8F74":"手","8F75":"才","8F76":"扎","8F77":"扑","8F78":"扒","8F79":"打","8F7A":"扔","8F7B":"托","8F7C":"扛","8F7D":"扣","8F7E":"执","8F7F":"扩","8F80":"扫","8F81":"扬","8F82":"扭","8F83":"扮","8F84":"扯","8F85":"扰","8F86":"扳","8F87":"扶","8F88":"批","8F89":"扼","8F8A":"找","8F8B":"承","8F8C":"技","8F8D":"抄","8F8E":"抉","8F8F":"把","8F90":"抑","8F91":"抒","8F92":"抓","8F93":"投","8F94":"抖","8F95":"抗","8F96":"折","8F97":"抚","8F98":"抛","8F99":"抜","8F9A":"抠","8F9B":"抡","8F9C":"抢","8F9D":"护","8F9E":"报","8F9F":"抨","8FA0":"披","8FA1":"抬","8FA2":"抱","8FA3":"抵","8FA4":"抹","8FA5":"抻","8FA6":"押","8FA7":"抽","8FA8":"拂","8FA9":"拄","8FAA":"担","8FAB":"拆","8FAC":"拇","8FAD":"拈","8FAE":"拉","8FAF":"拌","8FB0":"拍","8FB1":"拎","8FB2":"拐","8FB3":"拒","8FB4":"拓","8FB5":"拔","8FB6":"拖","8FB7":"拗","8FB8":"拘","8FB9":"拙","8FBA":"招","8FBB":"拜","8FBC":"拟","8FBD":"拢","8FBE":"拣","8FBF":"拥","8FC0":"拦","8FC1":"拧","8FC2":"拨","8FC3":"择","8FC4":"括","8FC5":"拭","8FC6":"拯","8FC7":"拳","8FC8":"拷","8FC9":"拼","8FCA":"拽","8FCB":"拾","8FCC":"拿","8FCD":"持","8FCE":"挂","8FCF":"指","8FD0":"按","8FD1":"挎","8FD2":"挑","8FD3":"挖","8FD4":"挚","8FD5":"挛","8FD6":"挞","8FD7":"挟","8FD8":"挠","8FD9":"挡","8FDA":"挣","8FDB":"挤","8FDC":"挥","8FDD":"挨","8FDE":"挪","8FDF":"挫","8FE0":"振","8FE1":"挲","8FE2":"挺","8FE3":"挽","8FE4":"捂","8FE5":"捅","8FE6":"捆","8FE7":"捉","8FE8":"捎","8FE9":"捏","8FEA":"捐","8FEB":"捕","8FEC":"捞","8FED":"损","8FEE":"捡","8FEF":"换","8FF0":"捣","8FF1":"捧","8FF2":"据","8FF3":"捱","8FF4":"捶","8FF5":"捷","8FF6":"捺","8FF7":"捻","8FF8":"掀","8FF9":"掂","8FFA":"授","8FFB":"掉","8FFC":"掌","904A":"掩","904B":"措","904C":"掰","904D":"掳","904E":"掺","904F":"揄","905A":"揶","905B":"揽","905C":"搀","905D":"搁","905E":"搂","905F":"搅","906A":"摁","906B":"摄","906C":"摆","906D":"摇","906E":"摊","906F":"摒","907A":"撕","907B":"撞","907C":"撤","907D":"撩","907E":"撬","907F":"播","908A":"攥","908B":"支","908C":"收","908D":"攸","908E":"改","908F":"攻","909A":"敞","909B":"敢","909C":"散","909D":"敦","909E":"敬","909F":"数","90A0":"敲","90A1":"整","90A2":"敷","90A3":"文","90A4":"斑","90A5":"斓","90A6":"斗","90A7":"料","90A8":"斜","90A9":"斟","90AA":"斤","90AB":"斥","90AC":"斩","90AD":"断","90AE":"斯","90AF":"新","90B0":"方","90B1":"施","90B2":"旁","90B3":"旅","90B4":"旋","90B5":"族","90B6":"旗","90B7":"无","90B8":"既","90B9":"日","90BA":"旦","90BB":"旧","90BC":"旨","90BD":"早","90BE":"旬","90BF":"旱","90C0":"时","90C1":"旷","90C2":"旺","90C3":"昂","90C4":"昌","90C5":"明","90C6":"昏","90C7":"易","90C8":"昔","90C9":"星","90CA":"映","90CB":"春","90CC":"昧","90CD":"昨","90CE":"昭","90CF":"是","90D0":"昵","90D1":"昼","90D2":"显","90D3":"時","90D4":"晃","90D5":"晋","90D6":"晌","90D7":"晒","90D8":"晓","90D9":"晕","90DA":"晚","90DB":"晦","90DC":"晨","90DD":"晚","90DE":"普","90DF":"景","90E0":"晰","90E1":"晴","90E2":"晶","90E3":"智","90E4":"晾","90E5":"暂","90E6":"暄","90E7":"暇","90E8":"暑","90E9":"暖","90EA":"暗","90EB":"暧","90EC":"暮","90ED":"暴","90EE":"曜","90EF":"曝","90F0":"曰","90F1":"曲","90F2":"曳","90F3":"更","90F4":"書","90F5":"曹","90F6":"曼","90F7":"曽","90F8":"曾","90F9":"替","90FA":"最","90FB":"月","90FC":"有","914A":"末","914B":"本","914C":"札","914D":"术","914E":"朱","914F":"朴","915A":"村","915B":"杖","915C":"杜","915D":"杞","915E":"束","915F":"条","916A":"析","916B":"枕","916C":"枚","916D":"果","916E":"枝","916F":"枢","917A":"柜","917B":"柠","917C":"查","917D":"柱","917E":"柳","917F":"柴","918A":"核","918B":"根","918C":"格","918D":"栽","918E":"桃","918F":"框","919A":"梓","919B":"梗","919C":"梦","919D":"梨","919E":"梭","919F":"梯","91A0":"械","91A1":"梱","91A2":"梳","91A3":"检","91A4":"棉","91A5":"棍","91A6":"棒","91A7":"棘","91A8":"棚","91A9":"森","91AA":"棱","91AB":"棵","91AC":"棺","91AD":"椅","91AE":"植","91AF":"椒","91B0":"楚","91B1":"楞","91B2":"業","91B3":"楼","91B4":"楽","91B5":"概","91B6":"榄","91B7":"榆","91B8":"榛","91B9":"榜","91BA":"榨","91BB":"榻","91BC":"槛","91BD":"槟","91BE":"槭","91BF":"槽","91C0":"模","91C1":"横","91C2":"樱","91C3":"橄","91C4":"橇","91C5":"橘","91C6":"橙","91C7":"橡","91C8":"橱","91C9":"檬","91CA":"欠","91CB":"次","91CC":"欢","91CD":"欣","91CE":"欧","91CF":"欲","91D0":"欸","91D1":"欺","91D2":"款","91D3":"歇","91D4":"歉","91D5":"歌","91D6":"止","91D7":"正","91D8":"此","91D9":"步","91DA":"武","91DB":"歧","91DC":"歪","91DD":"歹","91DE":"死","91DF":"殃","91E0":"殆","91E1":"殊","91E2":"残","91E3":"殖","91E4":"殡","91E5":"殴","91E6":"段","91E7":"殷","91E8":"殿","91E9":"毁","91EA":"毅","91EB":"毋","91EC":"母","91ED":"毎","91EE":"每","91EF":"毒","91F0":"比","91F1":"毕","91F2":"毗","91F3":"毙","91F4":"毛","91F5":"毡","91F6":"毫","91F7":"毯","91F8":"氏","91F9":"民","91FA":"气","91FB":"氛","91FC":"氧","924A":"汤","924B":"汪","924C":"汰","924D":"汲","924E":"汹","924F":"汽","925A":"沦","925B":"沧","925C":"沫","925D":"沮","925E":"河","925F":"沸","926A":"泞","926B":"泡","926C":"波","926D":"泣","926E":"泥","926F":"注","927A":"洗","927B":"洛","927C":"洞","927D":"津","927E":"洪","927F":"洲","928A":"济","928B":"浏","928C":"浑","928D":"浓","928E":"浜","928F":"浦","929A":"涕","929B":"涛","929C":"涡","929D":"涤","929E":"润","929F":"涨","92A0":"涩","92A1":"涮","92A2":"涯","92A3":"液","92A4":"涵","92A5":"涸","92A6":"淀","92A7":"淆","92A8":"淇","92A9":"淋","92AA":"淌","92AB":"淘","92AC":"淡","92AD":"淤","92AE":"淫","92AF":"深","92B0":"混","92B1":"淹","92B2":"添","92B3":"清","92B4":"渊","92B5":"渍","92B6":"渐","92B7":"渗","92B8":"渚","92B9":"渝","92BA":"渠","92BB":"渡","92BC":"渣","92BD":"温","92BE":"港","92BF":"渴","92C0":"游","92C1":"渺","92C2":"湃","92C3":"湎","92C4":"湖","92C5":"湛","92C6":"湮","92C7":"湾","92C8":"湿","92C9":"溃","92CA":"溅","92CB":"源","92CC":"溜","92CD":"溢","92CE":"溪","92CF":"溯","92D0":"溶","92D1":"溺","92D2":"滂","92D3":"滋","92D4":"滑","92D5":"滓","92D6":"滔","92D7":"滚","92D8":"滞","92D9":"满","92DA":"滤","92DB":"滥","92DC":"滨","92DD":"滩","92DE":"滴","92DF":"漂","92E0":"漆","92E1":"漉","92E2":"漏","92E3":"漓","92E4":"演","92E5":"漠","92E6":"漩","92E7":"漫","92E8":"漱","92E9":"潇","92EA":"潘","92EB":"潜","92EC":"潦","92ED":"潮","92EE":"潸","92EF":"潺","92F0":"澄","92F1":"澈","92F2":"澎","92F3":"澜","92F4":"澡","92F5":"激","92F6":"濑","92F7":"濡","92F8":"瀑","92F9":"瀬","92FA":"灌","92FB":"火","92FC":"灭","934A":"炒","934B":"炖","934C":"炙","934D":"炫","934E":"炭","934F":"炮","935A":"烛","935B":"烟","935C":"烤","935D":"烦","935E":"烧","935F":"烩","936A":"煌","936B":"煎","936C":"煞","936D":"煤","936E":"照","936F":"煮","937A":"燃","937B":"燎","937C":"燥","937D":"爆","937E":"爪","937F":"爬","938A":"牒","938B":"牙","938C":"牛","938D":"牟","938E":"牢","938F":"物","939A":"犯","939B":"状","939C":"犹","939D":"狂","939E":"狈","939F":"狗","93A0":"狙","93A1":"狞","93A2":"狠","93A3":"狡","93A4":"狩","93A5":"独","93A6":"狭","93A7":"狰","93A8":"狱","93A9":"狼","93AA":"猎","93AB":"猛","93AC":"猜","93AD":"猥","93AE":"猪","93AF":"猫","93B0":"献","93B1":"猴","93B2":"猾","93B3":"獠","93B4":"玄","93B5":"率","93B6":"玉","93B7":"王","93B8":"玛","93B9":"玩","93BA":"玫","93BB":"环","93BC":"现","93BD":"玲","93BE":"玷","93BF":"玻","93C0":"珍","93C1":"珑","93C2":"珠","93C3":"班","93C4":"現","93C5":"球","93C6":"理","93C7":"琐","93C8":"琢","93C9":"琦","93CA":"琴","93CB":"瑕","93CC":"瑟","93CD":"瑰","93CE":"璃","93CF":"璞","93D0":"璧","93D1":"瓜","93D2":"瓣","93D3":"瓦","93D4":"瓶","93D5":"瓷","93D6":"甄","93D7":"甘","93D8":"甚","93D9":"甜","93DA":"生","93DB":"用","93DC":"甩","93DD":"田","93DE":"由","93DF":"甲","93E0":"申","93E1":"电","93E2":"男","93E3":"甸","93E4":"町","93E5":"画","93E6":"畅","93E7":"界","93E8":"畏","93E9":"畑","93EA":"畔","93EB":"留","93EC":"畜","93ED":"略","93EE":"番","93EF":"畴","93F0":"畷","93F1":"疏","93F2":"疑","93F3":"疗","93F4":"疙","93F5":"疚","93F6":"疡","93F7":"疤","93F8":"疫","93F9":"疮","93FA":"疯","93FB":"疲","93FC":"疵","944A":"痴","944B":"痹","944C":"瘁","944D":"瘙","944E":"瘟","944F":"瘤","945A":"百","945B":"皂","945C":"的","945D":"皆","945E":"皇","945F":"皎","946A":"盐","946B":"监","946C":"盒","946D":"盖","946E":"盗","946F":"盘","947A":"盾","947B":"省","947C":"眈","947D":"眉","947E":"看","947F":"真","948A":"睁","948B":"睐","948C":"睑","948D":"睛","948E":"睡","948F":"督","949A":"瞒","949B":"瞟","949C":"瞥","949D":"瞧","949E":"瞩","949F":"瞪","94A0":"瞬","94A1":"瞰","94A2":"瞳","94A3":"矗","94A4":"矛","94A5":"矜","94A6":"矢","94A7":"知","94A8":"矩","94A9":"矫","94AA":"短","94AB":"矮","94AC":"石","94AD":"矶","94AE":"矿","94AF":"码","94B0":"砂","94B1":"砍","94B2":"研","94B3":"砣","94B4":"砧","94B5":"砰","94B6":"破","94B7":"砸","94B8":"础","94B9":"硕","94BA":"硬","94BB":"确","94BC":"碌","94BD":"碍","94BE":"碎","94BF":"碗","94C0":"碜","94C1":"碟","94C2":"碰","94C3":"碱","94C4":"碳","94C5":"碴","94C6":"確","94C7":"碾","94C8":"磁","94C9":"磕","94CA":"磨","94CB":"礁","94CC":"示","94CD":"礼","94CE":"社","94CF":"祈","94D0":"祖","94D1":"祝","94D2":"神","94D3":"祥","94D4":"票","94D5":"祭","94D6":"祷","94D7":"祸","94D8":"禁","94D9":"禅","94DA":"福","94DB":"禧","94DC":"离","94DD":"禽","94DE":"秀","94DF":"私","94E0":"秃","94E1":"秉","94E2":"秋","94E3":"种","94E4":"科","94E5":"秒","94E6":"秘","94E7":"租","94E8":"秤","94E9":"秩","94EA":"积","94EB":"称","94EC":"移","94ED":"秽","94EE":"稀","94EF":"程","94F0":"稍","94F1":"稚","94F2":"稠","94F3":"稳","94F4":"稻","94F5":"稽","94F6":"稿","94F7":"穂","94F8":"穆","94F9":"穗","94FA":"穴","94FB":"究","94FC":"穷","954A":"窝","954B":"窥","954C":"窪","954D":"立","954E":"竖","954F":"站","955A":"笑","955B":"笔","955C":"笛","955D":"符","955E":"笨","955F":"第","956A":"筛","956B":"筝","956C":"筷","956D":"筹","956E":"签","956F":"简","957A":"簇","957B":"簌","957C":"簿","957D":"籍","957E":"米","957F":"类","958A":"粼","958B":"精","958C":"糊","958D":"糕","958E":"糖","958F":"糗","959A":"組","959B":"結","959C":"絮","959D":"絕","959E":"緒","959F":"編","95A0":"縄","95A1":"縛","95A2":"繁","95A3":"纂","95A4":"纠","95A5":"红","95A6":"纤","95A7":"约","95A8":"级","95A9":"纪","95AA":"纯","95AB":"纱","95AC":"纲","95AD":"纳","95AE":"纵","95AF":"纷","95B0":"纸","95B1":"纹","95B2":"纺","95B3":"纽","95B4":"线","95B5":"练","95B6":"组","95B7":"绅","95B8":"细","95B9":"织","95BA":"终","95BB":"绊","95BC":"绌","95BD":"绍","95BE":"绎","95BF":"经","95C0":"绑","95C1":"绒","95C2":"结","95C3":"绕","95C4":"绘","95C5":"给","95C6":"绚","95C7":"络","95C8":"绝","95C9":"绞","95CA":"统","95CB":"绣","95CC":"继","95CD":"绩","95CE":"绪","95CF":"续","95D0":"绮","95D1":"绯","95D2":"绰","95D3":"绳","95D4":"维","95D5":"绵","95D6":"绷","95D7":"绸","95D8":"绺","95D9":"综","95DA":"绽","95DB":"绿","95DC":"缀","95DD":"缄","95DE":"缅","95DF":"缎","95E0":"缓","95E1":"缔","95E2":"缕","95E3":"编","95E4":"缘","95E5":"缚","95E6":"缜","95E7":"缝","95E8":"缠","95E9":"缤","95EA":"缩","95EB":"缪","95EC":"缭","95ED":"缴","95EE":"缸","95EF":"缺","95F0":"罄","95F1":"罐","95F2":"网","95F3":"罔","95F4":"罕","95F5":"罗","95F6":"罚","95F7":"罢","95F8":"罩","95F9":"罪","95FA":"置","95FB":"署","95FC":"罹","964A":"翁","964B":"翅","964C":"翌","964D":"翔","964E":"翘","964F":"翩","965A":"耐","965B":"耕","965C":"耗","965D":"耙","965E":"耳","965F":"耶","966A":"聚","966B":"聩","966C":"聪","966D":"肃","966E":"肆","966F":"肉","967A":"肥","967B":"肩","967C":"肪","967D":"肮","967E":"肯","967F":"育","968A":"胛","968B":"胜","968C":"胞","968D":"胡","968E":"胧","968F":"胫","969A":"脏","969B":"脐","969C":"脑","969D":"脓","969E":"脖","969F":"脚","96A0":"脯","96A1":"脱","96A2":"脸","96A3":"脾","96A4":"腆","96A5":"腋","96A6":"腐","96A7":"腑","96A8":"腔","96A9":"腕","96AA":"腫","96AB":"腮","96AC":"腰","96AD":"腹","96AE":"腺","96AF":"腻","96B0":"腼","96B1":"腾","96B2":"腿","96B3":"膀","96B4":"膈","96B5":"膊","96B6":"膏","96B7":"膛","96B8":"膜","96B9":"膝","96BA":"膨","96BB":"膺","96BC":"臀","96BD":"臂","96BE":"臃","96BF":"臆","96C0":"臊","96C1":"臣","96C2":"自","96C3":"臭","96C4":"至","96C5":"致","96C6":"臼","96C7":"舆","96C8":"舌","96C9":"舍","96CA":"舐","96CB":"舒","96CC":"舔","96CD":"舞","96CE":"舟","96CF":"航","96D0":"般","96D1":"舰","96D2":"舱","96D3":"舵","96D4":"船","96D5":"艮","96D6":"良","96D7":"艰","96D8":"色","96D9":"艳","96DA":"艺","96DB":"艾","96DC":"节","96DD":"芋","96DE":"芒","96DF":"芝","96E0":"芥","96E1":"芦","96E2":"芬","96E3":"芭","96E4":"花","96E5":"芳","96E6":"芽","96E7":"苍","96E8":"苏","96E9":"苗","96EA":"苛","96EB":"苟","96EC":"若","96ED":"苦","96EE":"英","96EF":"苹","96F0":"茁","96F1":"茂","96F2":"范","96F3":"茄","96F4":"茅","96F5":"茎","96F6":"茧","96F7":"茫","96F8":"茬","96F9":"茵","96FA":"茶","96FB":"茼","96FC":"荆","974A":"莅","974B":"莉","974C":"莓","974D":"莞","974E":"莫","974F":"莱","975A":"菱","975B":"菲","975C":"萃","975D":"萄","975E":"萌","975F":"萍","976A":"葩","976B":"葫","976C":"葬","976D":"葱","976E":"葵","976F":"蒂","977A":"蔚","977B":"蔬","977C":"蔷","977D":"蔼","977E":"蔽","977F":"蕉","978A":"藤","978B":"藻","978C":"蘑","978D":"蘸","978E":"虎","978F":"虏","979A":"蚊","979B":"蚬","979C":"蛇","979D":"蛊","979E":"蛋","979F":"蛎","97A0":"蛛","97A1":"蛤","97A2":"蛮","97A3":"蜂","97A4":"蜃","97A5":"蜊","97A6":"蜚","97A7":"蜜","97A8":"蜡","97A9":"蜷","97AA":"蝇","97AB":"蝈","97AC":"蝴","97AD":"蝶","97AE":"螃","97AF":"融","97B0":"螺","97B1":"蟀","97B2":"蟋","97B3":"蟹","97B4":"蠕","97B5":"蠢","97B6":"血","97B7":"衅","97B8":"行","97B9":"衍","97BA":"衔","97BB":"街","97BC":"衡","97BD":"衣","97BE":"补","97BF":"表","97C0":"衫","97C1":"衬","97C2":"衰","97C3":"衷","97C4":"袋","97C5":"袒","97C6":"袖","97C7":"袜","97C8":"被","97C9":"袭","97CA":"袱","97CB":"裁","97CC":"裂","97CD":"装","97CE":"裕","97CF":"裙","97D0":"裤","97D1":"裱","97D2":"裸","97D3":"裹","97D4":"褒","97D5":"褥","97D6":"褪","97D7":"褶","97D8":"襟","97D9":"西","97DA":"要","97DB":"覆","97DC":"親","97DD":"见","97DE":"观","97DF":"规","97E0":"觅","97E1":"视","97E2":"览","97E3":"觉","97E4":"觑","97E5":"角","97E6":"解","97E7":"觥","97E8":"触","97E9":"言","97EA":"記","97EB":"診","97EC":"話","97ED":"誉","97EE":"誓","97EF":"警","97F0":"譬","97F1":"计","97F2":"订","97F3":"认","97F4":"讥","97F5":"讧","97F6":"讨","97F7":"让","97F8":"讪","97F9":"训","97FA":"议","97FB":"讯","97FC":"记","984A":"诀","984B":"证","984C":"评","984D":"诅","984E":"识","984F":"诈","985A":"诟","985B":"诠","985C":"诡","985D":"询","985E":"该","985F":"详","986A":"诸","986B":"诹","986C":"诺","986D":"读","986E":"诽","986F":"课","989F":"谅","98A0":"谈","98A1":"谊","98A2":"谋","98A3":"谎","98A4":"谐","98A5":"谑","98A6":"谓","98A7":"谙","98A8":"谜","98A9":"谢","98AA":"谣","98AB":"谤","98AC":"谦","98AD":"谧","98AE":"谨","98AF":"谩","98B0":"谬","98B1":"谭","98B2":"谱","98B3":"谴","98B4":"谷","98B5":"豁","98B6":"豆","98B7":"象","98B8":"豪","98B9":"豫","98BA":"貌","98BB":"贝","98BC":"负","98BD":"贡","98BE":"财","98BF":"责","98C0":"贤","98C1":"败","98C2":"账","98C3":"货","98C4":"质","98C5":"贩","98C6":"贪","98C7":"贫","98C8":"贬","98C9":"购","98CA":"贯","98CB":"贱","98CC":"贲","98CD":"贴","98CE":"贵","98CF":"贷","98D0":"贸","98D1":"费","98D2":"贺","98D3":"贼","98D4":"资","98D5":"赅","98D6":"赋","98D7":"赌","98D8":"赎","98D9":"赏","98DA":"赐","98DB":"赔","98DC":"赖","98DD":"赚","98DE":"赛","98DF":"赞","98E0":"赠","98E1":"赢","98E2":"赤","98E3":"赦","98E4":"赫","98E5":"走","98E6":"赴","98E7":"赶","98E8":"起","98E9":"趁","98EA":"超","98EB":"越","98EC":"趋","98ED":"趟","98EE":"趣","98EF":"足","98F0":"趴","98F1":"趾","98F2":"跃","98F3":"跄","98F4":"跌","98F5":"跑","98F6":"跚","98F7":"距","98F8":"跟","98F9":"跤","98FA":"跨","98FB":"跪","98FC":"路","994A":"踮","994B":"踱","994C":"踵","994D":"踹","994E":"蹂","994F":"蹄","995A":"蹲","995B":"蹶","995C":"躁","995D":"躇","995E":"躪","995F":"躙","996A":"轮","996B":"软","996C":"轰","996D":"轴","996E":"轶","996F":"轻","997A":"输","997B":"辕","997C":"辗","997D":"辙","997E":"辛","997F":"辜","998A":"达","998B":"迁","998C":"迂","998D":"迄","998E":"迅","998F":"过","999A":"连","999B":"迟","999C":"迥","999D":"迪","999E":"迫","999F":"迭","99A0":"述","99A1":"迷","99A2":"迸","99A3":"迹","99A4":"追","99A5":"退","99A6":"送","99A7":"适","99A8":"逃","99A9":"逅","99AA":"逆","99AB":"选","99AC":"逊","99AD":"透","99AE":"逐","99AF":"递","99B0":"途","99B1":"逗","99B2":"通","99B3":"逛","99B4":"逝","99B5":"逞","99B6":"速","99B7":"造","99B8":"逡","99B9":"逢","99BA":"逮","99BB":"逸","99BC":"逻","99BD":"逼","99BE":"逾","99BF":"遂","99C0":"遇","99C1":"遍","99C2":"遏","99C3":"道","99C4":"遗","99C5":"遢","99C6":"遣","99C7":"遥","99C8":"遭","99C9":"遮","99CA":"遵","99CB":"避","99CC":"邀","99CD":"邂","99CE":"邃","99CF":"邋","99D0":"那","99D1":"邦","99D2":"邪","99D3":"邮","99D4":"邸","99D5":"邻","99D6":"郁","99D7":"郊","99D8":"郎","99D9":"郑","99DA":"部","99DB":"都","99DC":"鄂","99DD":"鄙","99DE":"酊","99DF":"酌","99E0":"配","99E1":"酒","99E2":"酝","99E3":"酥","99E4":"酩","99E5":"酪","99E6":"酬","99E7":"酱","99E8":"酷","99E9":"酸","99EA":"酿","99EB":"醇","99EC":"醉","99ED":"醋","99EE":"醍","99EF":"醐","99F0":"醒","99F1":"醺","99F2":"采","99F3":"释","99F4":"里","99F5":"重","99F6":"野","99F7":"量","99F8":"金","99F9":"釜","99FA":"鈴","99FB":"鉴","99FC":"鏖","9A40":"针","9A41":"钉","9A42":"钓","9A43":"钝","9A44":"钞","9A45":"钟","9A46":"钢","9A47":"钥","9A48":"钦","9A49":"钧","9A4A":"钩","9A4B":"钮","9A4C":"钱","9A4D":"钳","9A4E":"钵","9A4F":"钻","9A50":"钿","9A51":"铁","9A52":"铃","9A53":"铅","9A54":"铐","9A55":"铜","9A56":"铠","9A57":"铩","9A58":"铭","9A59":"铲","9A5A":"银","9A5B":"铺","9A5C":"链","9A5D":"销","9A5E":"锁","9A5F":"锅","9A60":"锈","9A61":"锋","9A62":"锏","9A63":"锐","9A64":"错","9A65":"锢","9A66":"锤","9A67":"锥","9A68":"锦","9A69":"键","9A6A":"锲","9A6B":"锻","9A6C":"镁","9A6D":"镇","9A6E":"镌","9A6F":"镖","9A70":"镜","9A71":"镣","9A72":"镯","9A73":"镳","9A74":"镶","9A75":"長","9A76":"长","9A77":"間","9A78":"门","9A79":"闪","9A7A":"闭","9A7B":"问","9A7C":"闯","9A7D":"闲","9A7E":"间","9A7F":"闷","9A80":"闸","9A81":"闹","9A82":"闺","9A83":"闻","9A84":"阀","9A85":"阁","9A86":"阂","9A87":"阅","9A88":"阔","9A89":"阖","9A8A":"队","9A8B":"阪","9A8C":"阱","9A8D":"防","9A8E":"阳","9A8F":"阴","9A90":"阵","9A91":"阶","9A92":"阻","9A93":"阿","9A94":"附","9A95":"际","9A96":"陆","9A97":"陈","9A98":"陋","9A99":"陌","9A9A":"降","9A9B":"限","9A9C":"陡","9A9D":"院","9A9E":"除","9A9F":"险","9AA0":"陪","9AA1":"陶","9AA2":"陷","9AA3":"隆","9AA4":"随","9AA5":"隐","9AA6":"隔","9AA7":"隘","9AA8":"隙","9AA9":"障","9AAA":"隧","9AAB":"隶","9AAC":"难","9AAD":"雀","9AAE":"雄","9AAF":"雅","9AB0":"集","9AB1":"雇","9AB2":"雌","9AB3":"雏","9AB4":"雕","9AB5":"雨","9AB6":"雪","9AB7":"雳","9AB8":"零","9AB9":"雷","9ABA":"雾","9ABB":"需","9ABC":"霄","9ABD":"霆","9ABE":"震","9ABF":"霉","9AC0":"霎","9AC1":"霜","9AC2":"霞","9AC3":"霭","9AC4":"露","9AC5":"霸","9AC6":"霹","9AC7":"霾","9AC8":"青","9AC9":"靓","9ACA":"静","9ACB":"非","9ACC":"靠","9ACD":"靡","9ACE":"面","9ACF":"革","9AD0":"靴","9AD1":"靶","9AD2":"鞋","9AD3":"鞠","9AD4":"鞭","9AD5":"韧","9AD6":"韭","9AD7":"音","9AD8":"韵","9AD9":"顎","9ADA":"页","9ADB":"顶","9ADC":"项","9ADD":"顺","9ADE":"须","9ADF":"顽","9AE0":"顾","9AE1":"顿","9AE2":"颁","9AE3":"颂","9AE4":"预","9AE5":"领","9AE6":"颇","9AE7":"颈","9AE8":"颊","9AE9":"频","9AEA":"颓","9AEB":"颔","9AEC":"颖","9AED":"颗","9AEE":"题","9AEF":"颚","9AF0":"颜","9AF1":"额","9AF2":"颠","9AF3":"颤","9AF4":"颦","9AF5":"颧","9AF6":"風","9AF7":"风","9AF8":"飒","9AF9":"飘","9AFA":"飙","9AFB":"飞","9AFC":"食","9B40":"飯","9B41":"餐","9B42":"餮","9B43":"饕","9B44":"饥","9B45":"饪","9B46":"饭","9B47":"饮","9B48":"饯","9B49":"饰","9B4A":"饱","9B4B":"饲","9B4C":"饵","9B4D":"饶","9B4E":"饼","9B4F":"饿","9B50":"馅","9B51":"馆","9B52":"馈","9B53":"首","9B54":"香","9B55":"馨","9B56":"馬","9B57":"马","9B58":"驭","9B59":"驯","9B5A":"驰","9B5B":"驱","9B5C":"驳","9B5D":"驴","9B5E":"驶","9B5F":"驹","9B60":"驻","9B61":"驾","9B62":"骂","9B63":"骄","9B64":"骇","9B65":"骋","9B66":"验","9B67":"骑","9B68":"骗","9B69":"骚","9B6A":"骤","9B6B":"骨","9B6C":"骰","9B6D":"骸","9B6E":"骼","9B6F":"髓","9B70":"高","9B71":"鬓","9B72":"鬼","9B73":"魁","9B74":"魂","9B75":"魄","9B76":"魅","9B77":"魔","9B78":"鰤","9B79":"鱈","9B7A":"鱼","9B7B":"鱿","9B7C":"鲁","9B7D":"鲑","9B7E":"鲜","9B7F":"鲭","9B80":"鳕","9B81":"鳞","9B82":"鸟","9B83":"鸡","9B84":"鸣","9B85":"鸦","9B86":"鸭","9B87":"鸽","9B88":"鸿","9B89":"鹅","9B8A":"鹏","9B8B":"鹤","9B8C":"鹫","9B8D":"鹰","9B8E":"麦","9B8F":"麻","9B90":"麾","9B91":"黄","9B92":"黎","9B93":"黏","9B94":"黑","9B95":"黔","9B96":"默","9B97":"黯","9B98":"鼎","9B99":"鼓","9B9A":"鼠","9B9B":"鼻","9B9C":"鼾","9B9D":"齐","9B9E":"齿","9B9F":"龄","9BA0":"龈","9BA1":"龙","9BA2":"龟","9BA3":"一","9BA4":"匣","9BA5":"椎","9BA6":"瞭","9BA7":"忱","9BA8":"鞥","9BA9":"瞠","9BAA":"狐","9BAB":"庚","9BAC":"杠","9BAD":"怅","9BAE":"嘁","9BAF":"鹊","9BB0":"伎","9BB1":"泊","9BB2":"鳌","9BB3":"屌","9BB4":"屡","9BB5":"煨","9BB6":"恣","9BB7":"泯","9BB8":"涟","9BB9":"糅","9BBA":"婀","9BBB":"桔","9BBC":"発","9BBD":"赁","9BBE":"卒","9BBF":"瞑","9BC0":"狸","9BC1":"孰","9BC2":"颐","9BC3":"偕","9BC4":"赘","9BC5":"林","9BC6":"馁","9BC7":"缥","9BC8":"盔","9BC9":"恻","9BCA":"殉","9BCB":"漪","9BCC":"娜","9BCD":"捋","9BCE":"忤","9BCF":"茨","9BD0":"缈","9BD1":"酵","9BD2":"鲠","9BD3":"舷","9BD4":"砺","9BD5":"罅"}
有了这个表,我们就能很愉快地解码出中文文本了。
#!/usr/bin/env python3
"""
映射表键为 shift-jis 双字节 hex 大写字符串,值为对应字符。
"""
import json
import sys
import os
# ---------- 加载映射表 ----------
MAP_PATH = os.path.join(os.path.dirname(__file__), 'shiftjis_map.json')
def load_map(path=MAP_PATH):
with open(path, 'r', encoding='utf-8') as f:
raw = json.load(f)
# 确保键为大写 hex
return {k.upper(): v for k, v in raw.items()}
MAPPING = load_map()
# 构建反向映射(字符 -> hex 大写)
REVERSE_MAP = {}
for hex_str, char in MAPPING.items():
if char not in REVERSE_MAP:
REVERSE_MAP[char] = hex_str
# 若有重复字符只保留一个 hex,不影响编码唯一性
# ---------- 解码 ----------
def decode_custom(data: bytes) -> str:
"""
将字节流 data 按自定义规则解码:
- 若连续两字节的 hex 在映射表中,则使用映射字符;
- 否则按标准 shift_jis 解码(失败时尝试替代方案)。
"""
result = []
i = 0
while i < len(data):
# 尝试双字节映射
if i + 1 < len(data):
two_bytes = data[i:i+2]
hex_str = two_bytes.hex().upper()
if hex_str in MAPPING:
result.append(MAPPING[hex_str])
i += 2
continue
# 单字节 ASCII / 标准 SJIS 处理
try:
# 尝试单字节 ASCII
if data[i] < 0x80:
result.append(chr(data[i]))
i += 1
else:
# 双字节标准 SJIS 解码
if i + 1 < len(data):
chunk = data[i:i+2]
decoded = chunk.decode('shift_jis')
result.append(decoded)
i += 2
else:
# 最后一个字节无法组成双字节,用替换字符
result.append('\ufffd')
i += 1
except UnicodeDecodeError:
# 标准 SJIS 解码失败,尝试映射表(已在上方检查过,但以防万一)
if i + 1 < len(data):
chunk = data[i:i+2]
hex_str = chunk.hex().upper()
if hex_str in MAPPING:
result.append(MAPPING[hex_str])
i += 2
else:
result.append('\ufffd')
i += 1
else:
result.append('\ufffd')
i += 1
return ''.join(result)
def encode_custom(text: str) -> bytes:
"""
将文本 text 编码为字节流:
- 若字符在反向映射表中,使用对应的 hex 字节;
- 否则按标准 shift_jis 编码。
"""
result = bytearray()
for ch in text:
if ch in REVERSE_MAP:
hex_str = REVERSE_MAP[ch]
result.extend(bytes.fromhex(hex_str))
else:
try:
encoded = ch.encode('shift_jis')
result.extend(encoded)
except UnicodeEncodeError:
# 无法编码的字符用 ? 代替
result.extend(b'?')
return bytes(result)
def main():
if len(sys.argv) < 4:
print("用法: python codec.py [decode|encode] <输入文件> <输出文件>")
sys.exit(1)
mode = sys.argv[1].lower()
input_path = sys.argv[2]
output_path = sys.argv[3]
if mode == 'decode':
with open(input_path, 'rb') as f:
data = f.read()
text = decode_custom(data)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(text)
print(text.replace(',', '\n').replace('\\n', '\n'))
print(f"解码完成,写入 {output_path}")
elif mode == 'encode':
with open(input_path, 'r', encoding='utf-8') as f:
text = f.read()
data = encode_custom(text)
with open(output_path, 'wb') as f:
f.write(data)
print(f"编码完成,写入 {output_path}")
else:
print("模式错误,请使用 decode 或 encode")
if __name__ == '__main__':
main()
解码出的文本示例:
,mv01,「啊…」,终于,还是下起来了。……
然后,我们就可以轻松愉快地修改白2翻译了~



(有兴趣可以看看
1 条回复