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

GML中巴西葡萄牙语特殊字符归一化的更优实现方案咨询

解决方案:简化巴西葡语字符串归一化的实现

针对你遇到的string_lower()无法处理带重音大写字符(如Á)、手动维护字符数组冗余的问题,推荐两种更优的实现方式:

方法1:Unicode规范化(推荐,GameMaker Studio 2.3+适用)

利用Unicode的NFD(规范分解)格式,将带重音的字符拆分为基础字符+重音标记,再移除重音标记,无需手动维护字符映射:

function string_normalize(str) {
    // 统一转换为小写(GMS 2.3+的string_lower已支持Unicode字符)
    str = string_lower(str);
    // 将字符串转换为NFD规范形式,拆分重音与基础字符
    str = string_utf8_normalize(str, "NFD");
    // 移除所有Unicode重音标记(U+0300至U+036F范围)
    str = string_replace_all_regex(str, "[\\x{0300}-\\x{036F}]", "");
    return str;
}

优势:

  • 无需手动维护重音字符数组,避免遗漏或冗余
  • 自动支持所有带重音的Unicode字符,覆盖巴西葡语全部特殊字符(如Á、Ã、Ç等)
  • 代码简洁,扩展性强,后续无需因新增字符修改代码

方法2:优化字符映射(兼容旧版GameMaker)

若使用旧版本GameMaker,无法使用Unicode规范化函数,可先统一处理大写带重音字符的转换,再替换重音:

function string_normalize(str) {
    // 定义大写重音字符与对应小写、基础字符的映射
    var upper_accents = ["À","Á","Â","Ã","Ä","È","É","Ê","Ë","Ì","Í","Î","Ï","Ò","Ó","Ô","Õ","Ö","Ù","Ú","Û","Ü","Ç"];
    var lower_accents = ["à","á","â","ã","ä","è","é","ê","ë","ì","í","î","ï","ò","ó","ô","õ","ö","ù","ú","û","ü","ç"];
    var simple_chars = ["a","a","a","a","a","e","e","e","e","i","i","i","i","o","o","o","o","o","u","u","u","u","c"];

    // 先将大写重音字符转为小写
    for (var i = 0; i < array_length(upper_accents); i++) {
        str = string_replace_all(str, upper_accents[i], lower_accents[i]);
    }
    // 转换剩余普通大写字符为小写
    str = string_lower(str);
    // 替换小写重音字符为基础字符
    for (var i = 0; i < array_length(lower_accents); i++) {
        str = string_replace_all(str, lower_accents[i], simple_chars[i]);
    }

    return str;
}

优势:

  • 解决了原函数中string_lower()无法处理带重音大写的问题
  • 仅需维护一套映射关系,避免重复定义冗余的字符数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:20:59