前言
在一些Unity 项目中,你可能会在 Plugins中看到一堆类似:
I18N.dll
I18N.CJK.dll
I18N.Other.dll
I18N.MidEast.dll
I18N.West.dll
I18N.Rare.dll
你可能会疑惑:这些 DLL 是干什么的?能不能删?删了会不会崩?
本文就来带你搞清楚它们的作用和裁剪方法。
一、I18N 是什么?
I18N 是 Internationalization(国际化)的缩写,因为单词中间省略了 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% 项目可删)。 |
三、判断哪些必须保留
-
如果项目只用 UTF-8(Unity 默认),且不读取外部旧编码文件,可删大部分。
-
必须保留:
-
I18N.dll(核心依赖) -
I18N.CJK.dll(中文/日文/韩文项目)
-
-
其他区域 DLL(
Other、MidEast、West、Rare)仅在有对应需求时保留。
四、如何裁剪
-
删除不需要的
I18N.*.dll文件(先备份!)。 -
打包并测试外部文本读取功能,确认无
System.ArgumentException: No data is available for encoding错误。 -
如果出现编码缺失,可在启动时注册编码提供程序(这需要引入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没办法
4365

被折叠的 条评论
为什么被折叠?



