locres文件是ue引擎专用的二进制序列化格式,含magic头("locr")、压缩块与哈希表,不可用文本方式直接读取;必须通过ue运行时api(如ulocalizationservice)或导出为csv/xlf后解析。

Locres文件本质是二进制序列化数据,不能直接用文本方式读取
Unreal 的 .locres 文件不是 JSON、XML 或 INI,而是通过 FLocalizedString 和 FText 序列化后的二进制格式,由引擎内部的 FLocalizationResource 类解析。试图用 std::ifstream 读成字符串或逐行解析会得到乱码或崩溃——因为头部有 magic number(0x4C6F6352 对应 "LocR"),后面是压缩块、哈希表和本地化键值对的紧凑布局。
常见错误现象:
- 直接 std::ifstream::read() 出来的字节流无法识别为 UTF-8 文本
- 用 std::string 构造后调用 .c_str() 输出全是问号或非法字符
- 尝试用第三方 JSON 解析器报 “invalid start of token”
必须通过 Unreal 运行时 API 读取,标准 C++ 无独立解析能力
Unreal 没有公开 .locres 的反序列化接口给纯 C++ 程序(比如命令行工具或外部编辑器),所有合法读取都依赖 ULocalizationService、FTextLocalizationManager 或 FLocalizationResource 的私有方法——而这些类仅在引擎运行时上下文可用,且多数为 private 或 friend 限定。
可行路径只有两条:
- 在 UE 编辑器或游戏进程中,用蓝图或 C++ 插件调用 FText::FromStringTable() 或 ULocalizationService::GetLocalizedString()
- 使用官方支持的导出流程:先在编辑器中将 .locres 导出为 .csv 或 .xlf(通过 Localization Dashboard → Export),再用标准 C++ 读 CSV 行解析
注意:FText::FromStringTable() 要求字符串表(.csv)已加载;ULocalizationService 在非编辑器构建中默认不可用,需启用 WITH_EDITOR 宏并链接 LocalizationService 模块。
若坚持在外部工具中解析 locres,唯一稳定方案是逆向 + 限制使用场景
社区有少量逆向实现(如 ue4-locres-parser),但仅支持特定引擎版本(如 4.27)、不处理压缩块(ZLIB 或 LZ4)、无法还原 FText 的 rich metadata(如性别、复数形式)。实际使用时:
- 必须确认目标
.locres文件未启用bUseDynamicLocalization(否则资源分散在多个 chunk 中) - 需手动解压:先读 4 字节 compression method ID,再按
ELocalizedTextSourceCompression枚举值选择解压逻辑 - 字符串内容存储为
int32长度 +uint16UTF-16 字符数组,不能直接 reinterpret_cast 为std::string - 键名(Key)和命名空间(Namespace)是独立哈希表索引,需同步解析两个 offset table 才能匹配出完整
Namespace.Key → Text映射
示例关键结构(UE5.3):
struct FLocresHeader {
uint32 Magic; // 0x4C6F6352 ("LocR")
uint32 Version; // e.g., 12 for UE5.3
uint32 Compression; // 0=none, 1=zlib, 2=lz4
uint32 StringCount;
uint32 KeyOffsetTableOffset;
uint32 StringOffsetTableOffset;
};
最实用建议:绕过 locres,改用源数据格式协作
真正需要“读取本地化”的场景,90% 是为了自动化翻译、CI 校验或 QA 提取。与其硬啃 .locres,不如推动流程前置:
- 让美术/策划始终在
.csv字符串表中维护原文,.locres仅作为构建产物生成 - 用 Python 或 C++ 读取
SourceStringTable.csv(标准 Excel 兼容 CSV,含Namespace,Key,Source,NativeCulture列) - 构建脚本中调用
UnrealBuildTool -LocalizationPreset=Game触发.locres生成,不反向解析 - 若必须验证 locres 内容,用 UE 自带命令行工具:
UnrealEditor-Cmd.exe YourGame.uproject -run=Localization -export -culture=zh-Hans
复杂点在于:locres 不是“文件”,是资源打包结果——它可能被加密、分片、合并进 .ucas,甚至运行时动态加载。想跳过引擎直接读,等于想绕过 SQLite 引擎直接 parse .db 文件头去查表——理论上可行,实践中几乎总是得不偿失。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











