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

COLDFUSION应用从Word/Outlook复制内容粘贴提交后出现问号问题

问题根因说明

你遇到的从Office复制内容存库后显示问号的问题,本质是字符集链路不兼容导致的:Word/Outlook的内容默认带大量Windows-1252编码的特殊字符(比如弯引号、长破折号、非打断空格等),如果前端页面、ColdFusion服务、数据库连接、数据库本身的字符集没有统一用UTF-8,这些特殊字符在转码过程中就会被替换为问号。直接过滤删除字符属于兜底方案,优先建议先排查全链路字符集配置。

第一步:优先排查全链路编码配置

  • 前端页面:确认所有提交评论的页面头部加入<meta charset="UTF-8">,表单可以额外加accept-charset="UTF-8"属性强制提交编码
  • ColdFusion服务:进入CF管理员后台,在「服务器设置 > Settings」中把「File Encoding」设置为UTF-8,同时给CF对应的JVM启动参数添加-Dfile.encoding=UTF8,重启CF服务生效
  • 数据库侧:
    • 如果用SQL Server,存储评论的字段要改为NVARCHAR/NTEXT类型,VARCHAR默认仅支持ASCII扩展编码,存Unicode字符会自动转问号
    • 如果用MySQL,数据库/表/字段的字符集统一设为utf8mb4(支持全量Unicode包括emoji)
  • 数据库连接串:在CF的数据源配置中,给连接串添加编码参数,比如MySQL的连接串追加useUnicode=true&characterEncoding=UTF-8

第二步:优化字符清理逻辑(兜底方案)

你当前的代码存在两个问题:一是把Replace当正则替换用(Replace仅做精确字符串匹配,正则替换需要用ReReplace);二是直接删除所有非ASCII字符会丢失合法内容,建议先做常用Office特殊字符映射,再过滤非法字符。
优化后的参考代码如下:

str = RemoveHTML(str);
// 先替换Office常见特殊字符为可兼容的普通字符
// 替换非打断空格为普通空格
str = Replace(str, Chr(160), " ", "All");
// 替换弯引号为直引号
str = Replace(str, Chr(8220), """", "All");
str = Replace(str, Chr(8221), """", "All");
str = Replace(str, Chr(8216), "'", "All");
str = Replace(str, Chr(8217), "'", "All");
// 替换长短破折号为普通横杠
str = Replace(str, Chr(8211), "-", "All");
str = Replace(str, Chr(8212), "-", "All");
// 替换制表符、换行符为空格
str = Replace(str, Chr(9), " ", "All");
str = Replace(str, Chr(10), " ", "All");
str = Replace(str, Chr(13), " ", "All");
// 正则过滤所有非ASCII可打印字符,注意这里用ReReplace
str = ReReplace(str, "[^\x20-\x7E]", "", "ALL");
// 合并多空格为单空格
str = ReReplaceNoCase(str, "[[:blank:]]{2,}", " ", "All");
str = Trim(str);
str = Left(str, 5000);
return str;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:27:03