分类 默认分类 下的文章

默认分类,什么都有可能有

Web字体为何需要「瘦身」?

在网页设计中,CJK(China Japan Korea)字体的加载始终是网页性能优化的“顽疾”。一套完整的CJK字体(如思源黑体)往往包含近5万多个字符,体积高达10MB+,而在实际页面可能仅需几百字。对于繁体中文和日文网页,情况更为复杂:三者共享部分汉字(如“人”“山”),但字形细节、字符编码(Unicode分区)及高频用字存在显著差异。

传统方案如全量加载或静态子集化(Static Subsetting)难以应对多语言场景的灵活性需求,例如一个同时包括简体中文,繁体中文,日文汉字的页面,若统一使用全量字体文件,将浪费大量带宽(即使使用CDN,也会造成一定的渲染拥塞);若手动拆分简/繁/日子集,又需反复维护字符映射表。动态子集化(Dynamic Subsetting)是个好选择,但是又会需要使用三方库,造成对老平台的兼容性和可开发性困难。
共通汉字库 由此成为可用选项——但实现这一目标,首先需要回答一个根本问题:如何定义“常用汉字”?

汉字常用字标准的「战国时代」

简体字

由教育部发表的《通用规范汉字表》(2013版)收录8105字,分为三级:一级字表(3500字)覆盖99%书面语使用场景,但依据对实际当前简中部分门户网页的分析,前1500字即可满足90%以上需求。然而,无法避免偶尔在文本中会遇到的少见字无法覆盖的问题,比如'鎏金',所以还是需要对8105字完整保留。

繁体字

台湾地区教育部发表的《常用国字标准字体表》(4808字)与香港教育局发布的《常用字字形表》(4759字)看似数量接近,实则差异显著。例如'爲/為','裡/裏',加之香港保留部分粤语用字(如'咗','哋'),导致字符集无法直接并用。

日语汉字

日本《常用汉字表》(2136字)与JIS X 0213标准(约1万字)形成“核心+扩展”结构。但日文汉字存在独特的简笔字(如'桜→樱')、和制汉字(如'畑'),进一步的增加了子集化复杂度。

今天帮朋友在分析索尼电脑的恢复镜像,其使用一种奇怪的MOD格式作为存储设备驱动和附带软件的格式。
有些MOD文件用HEX编辑器打开可以看到一些明文,有些甚至可以使用7z打开看到目录结构,但是解压时候却提示是损坏的CAB格式。
所以针对恢复盘镜像中的安装器做了些许逆向,一开始依据代码和字符串找到的是一个很复杂的基于"Sony Corporation"字符串的XOR算法,但是写了个小工具把算法利用到MOD文件上后反而导致其彻底打不开了。

一时间想到了放弃,但是准备放弃之前,鼠标往下一滑动,发现MOD文件的尾部都有WIM信息,突然灵光乍现想到这不会是改了MAGIC的WIM镜像吧?接着尝试替换掉了文件最前面的16字节,果然都可以完整解压和打开了。

以下就是更为方便的Python代码,其支持直接对恢复盘中的data目录进行遍历恢复,可将所有mod文件恢复为正常的wim文件。

代码

import os
import argparse

SIGNATURE = b"oratdnn"
PATCH = b"MSWIM\x00\x00\x00\xd0\x00\x00\x00\x00\r\x01\x00"

def process_file(file_path):
    with open(file_path, 'rb') as f:
        file_header = f.read(16)
        remaining_data = f.read()
    
    if SIGNATURE in file_header:
        print(f"Detected!! {file_path}")
        
        with open(file_path, 'wb') as f:
            f.write(PATCH)
            f.write(remaining_data)
        
        new_file_path = file_path.replace(".mod", ".wim")
        os.rename(file_path, new_file_path)
        
        print(f"Patched!! {file_path} -> {new_file_path}")
        return True
    else:
        print(f"Skipped!! {file_path} (no matching header)")
        return False

def traverse_directory(directory):
    for root, _, files in os.walk(directory):
        for filename in files:
            file_path = os.path.join(root, filename)
            
            if filename.endswith(".mod"):
                process_file(file_path)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="SONY Recovery MODule File Patching Tool")
    parser.add_argument("directory", type=str, help="Path to data folder")
    args = parser.parse_args()
    
    traverse_directory(args.directory)

最近整理电脑的备份时候翻出来的表格文件,用Office的保存为HTML进行了保存。
大约是去年年尾时候所收集的兆芯CPU的详细信息列表
凑合看吧,也许有用!

ZHAOXIN-L

其中包括的所有商标以和数据版权均属于上海兆芯集成电路有限公司。