Unity 中的 I18N 系列 DLL 详解与裁剪指南

前言

在一些Unity 项目中,你可能会在 Plugins中看到一堆类似:

I18N.dll  
I18N.CJK.dll  
I18N.Other.dll  
I18N.MidEast.dll  
I18N.West.dll  
I18N.Rare.dll  

你可能会疑惑:这些 DLL 是干什么的?能不能删?删了会不会崩?
本文就来带你搞清楚它们的作用和裁剪方法。


一、I18N 是什么?

I18NInternationalization(国际化)的缩写,因为单词中间省略了 18 个字母,所以叫 I18N。

Mono(Unity 使用的 .NET 运行时)中,这些 I18N 系列 DLL 负责多语言、区域信息、字符编码等功能。
不同区域的字符集(GBK、Shift_JIS、Windows-1252 等)被拆分到不同的 DLL 中,以便按需加载,减小基础运行时体积。

在原生 .NET Framework 里,这些功能是内置在运行库中的,而在 Mono 里被拆成了多个 I18N.*.dll 文件。

比如你使用一些第三方库Excel库,Word库(可能这些库为了兼容而依赖了I18N),可能会遇到这个问题:编辑器正常运行,打包就异常.这可能就是因为I18N这些DLL没有被成功打包进去.所以有些开发者会手动把这些DLL放进Plugins目录下来确保它们成功被打包进去.

我曾使用ExcelDatReader这个库就曾遇到过这个问题

打包后不包含I18N相关的程序集,导致出现了编码问题.


二、各个 DLL 的功能

文件名主要功能典型用途是否必需
I18N.dll核心国际化支持库,提供 CultureInfo、区域信息、字符编码查找入口。使用特定编码(非 UTF-8)的文本读取、日期时间国际化等。✅ 必须保留(依赖关系广)。
I18N.Other.dll少用编码(ISO-2022、KOI8-R、ISCII 等)。印度、俄罗斯部分编码文件。❌ 可选(大部分中文/英文项目可删)。
I18N.CJK.dll中日韩字符编码(GB2312、GB18030、Shift_JIS、EUC-KR 等)。读取 GBK/Shift_JIS/EUC-KR 编码文件。⚠ 中文/日文/韩文项目必须保留,否则 Encoding.GetEncoding("gb2312") 会报错。
I18N.MidEast.dll中东编码(Arabic Windows-1256、ISO-8859-6 等)。阿拉伯语、波斯语、希伯来语文本。❌ 可选(无中东需求可删)。
I18N.West.dll西欧、北欧编码(ISO-8859-1、Windows-1252 等)。西欧旧文档或 CSV 数据。❌ 可选(仅英文 UTF-8 项目可删)。
I18N.Rare.dll罕见字符编码(历史编码、方言编码等)。特殊需求。❌ 可选(99% 项目可删)。

三、判断哪些必须保留

  1. 如果项目只用 UTF-8(Unity 默认),且不读取外部旧编码文件,可删大部分。

  2. 必须保留:

    • I18N.dll(核心依赖)

    • I18N.CJK.dll(中文/日文/韩文项目)

  3. 其他区域 DLL(OtherMidEastWestRare)仅在有对应需求时保留。


四、如何裁剪

  1. 删除不需要的 I18N.*.dll 文件(先备份!)。

  2. 打包并测试外部文本读取功能,确认无 System.ArgumentException: No data is available for encoding 错误。

  3. 如果出现编码缺失,可在启动时注册编码提供程序(这需要引入CodePages 包):

    using System.Text;
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

    这样即便删除了一些 DLL,也能用 .NET 的 CodePages 包来补充。


五、它们从哪里来的?

源自 Mono Class Library,Unity 会在构建时从 Editor\Data\MonoBleedingEdge\lib\mono\4.5 拷贝它们到最终包中(可能不会拷贝)

六、如何更优雅

我感觉这些DLL直接放到Plugins目录下很乱

我有两个办法:

1.可以在Plugins下建一个I18N目录,将相关DLL放进这个目录(Unity版本较低则谨慎使用)

2.使用Nuget For Unity引入System.Text.Encoding.CodePages,

在尽可能早的时机调用 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);


.NET Core / .NET 5+ 里,微软把非 UTF 编码都移出了核心库,单独放进 System.Text.Encoding.CodePages 包(NuGet)

本质上就是 I18N 的“官方现代化版本”,但实现不同,性能更高,也没有那么多额外的文化信息。

  • 好处:不需要带上整套 I18N.CJK / I18N.West 等,体积小

  • 限制:它只提供编码,不提供 CultureInfo 的完整国际化数据(日期、货币、本地化排序等还是要靠 Unity / .NET 自带)

可以替代的部分

  • I18N.CJK.dll(中日韩编码)

  • I18N.West.dll(西欧编码)

  • I18N.MidEast.dll(中东编码)

  • I18N.Other.dll(小语种编码)

  • I18N.Rare.dll(极少用的编码)

 不能完全替代的部分

  • I18N.dll 核心(它还包含文化信息解析,而 CodePages 只有编码表)

  • 如果项目里直接使用了 CultureInfo 加本地化规则(日期/货币等),CodePages没办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值