You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GMS自定义GSON读写文件时字符串长度异常问题求助

排查GMS文件读写后GSON字符串多出隐形字符的问题

常见原因及解决步骤

1. 文本模式读写的换行符/编码转换问题

GMS的文本文件读写函数(如file_text_write_string/file_text_read_string)会自动处理换行符(Windows下将\n转为\r\n),或默认添加UTF-8 BOM头,导致读取后字符串多出隐形字符。

排查动作

对比直接生成的字符串与读取后的字符串长度:

var direct_str = gsonStringifySelf();
show_debug_message("直接生成长度:" + string(string_length(direct_str)));

// 写入再读取
var file = file_text_open_write("test.gson");
file_text_write_string(file, direct_str);
file_text_close(file);

var file_read = file_text_open_read("test.gson");
var file_str = file_text_read_string(file_read);
file_text_close(file_read);
show_debug_message("读取后长度:" + string(string_length(file_str)));

如果长度差1,大概率是多了换行符;差3则是UTF-8 BOM头导致。

解决方法

  • 若为换行符:读取后修剪首尾控制字符
file_str = string_trim(file_str);
// 或精准移除末尾换行
while string_length(file_str) > 0 and (string_char_at(file_str, string_length(file_str)) == "\n" or string_char_at(file_str, string_length(file_str)) == "\r") {
    file_str = string_copy(file_str, 1, string_length(file_str) - 1);
}
  • 若为UTF-8 BOM:读取后移除开头BOM
var bom = chr(239) + chr(187) + chr(191);
if string_length(file_str) >= 3 and string_copy(file_str, 1, 3) == bom {
    file_str = string_copy(file_str, 4, string_length(file_str) - 3);
}

2. 改用二进制读写规避文本转换

二进制读写会完全保留原始字符串,不会添加任何额外字符,是最稳妥的方案:

  • 写入代码:
var save_str = gsonStringifySelf();
var file = file_bin_open("level_data.gson", 1); // 1 = 写入模式
file_bin_write_string(file, save_str);
file_bin_close(file);
  • 读取代码:
var file = file_bin_open("level_data.gson", 0); // 0 = 读取模式
var str_length = file_bin_size(file);
var load_str = file_bin_read_string(file, str_length);
file_bin_close(file);

3. 检查自定义GSON序列化函数的隐性输出

确认gsonStringifySelf()生成的字符串是否本身包含不可见字符(如空字符\0),只是内存解析时被忽略。可以输出每个字符的ASCII码排查:

var str = gsonStringifySelf();
for(var i=1; i<=string_length(str); i++){
    show_debug_message("位置" + string(i) + ": " + string(ord(string_char_at(str, i))));
}

对比读取后字符串的ASCII码,定位差异字符。


内容的提问来源于stack exchange,提问作者Majestic_Monkey_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:33