Handlebars.Net渲染日文字符转为Unicode十进制编码的修复方法咨询
Handlebars.Net渲染日文字符转为Unicode十进制编码的修复方法咨询
嗨,这个问题我之前也遇到过!其实是Handlebars.Net默认开启了HTML转义导致的——它会把非ASCII字符自动转换成HTML实体编码,所以你的「あ」才变成了あ。这里有两种简单的修复方法:
方法1:针对单个变量关闭编码(推荐局部场景)
Handlebars里提供了三重大括号语法,用它包裹变量就能跳过HTML转义,直接输出原始字符。修改你的模板字符串即可:
public class TemplateData { public string inputstring = "あ"; } public static string HandleBar() { var message = "{{{inputstring}}}"; // 把双大括号改成三大括号 var handlebars = Handlebars.Create(); // 保留NewtonsoftJson配置,不影响修复 handlebars.Configuration.UseNewtonsoftJson(); var template = handlebars.Compile(message); var result = template(new TemplateData()); return result; // 现在会输出「あ」而不是编码后的字符 }
方法2:全局关闭HTML转义(适合全项目不需要转义的场景)
如果你的所有模板都不需要HTML转义,可以直接修改Handlebars的全局配置,关闭自动转义功能:
public class TemplateData { public string inputstring = "あ"; } public static string HandleBar() { var message = "{{inputstring}}"; var handlebars = Handlebars.Create(); handlebars.Configuration.UseNewtonsoftJson(); // 添加这一行,全局禁用HTML转义 handlebars.Configuration.EscapeHtml = false; var template = handlebars.Compile(message); var result = template(new TemplateData()); return result; // 同样会输出原始的「あ」 }
简单解释下原理:Handlebars.Net默认的行为是对输出内容做HTML安全转义,避免XSS风险,但这会把非ASCII字符转成对应的HTML实体编码。上面两种方法分别从局部和全局层面跳过了这个转义逻辑,就能得到你想要的原始日文字符啦。
备注:内容来源于stack exchange,提问作者Worthy7
相关产品推荐
相关产品推荐

