javascript中cookie需用encodeuricomponent/decodeuricomponent编码中文,因其基于utf-8、兼容unicode且替代已废弃的escape/unescape;服务端也须统一utf-8编码,配合正则提取后解码,或使用js-cookie等成熟库。

JavaScript 中 Cookie 不能直接安全存储中文字符,因为原始 Cookie 规范只允许 ASCII 字符。浏览器在遇到非 ASCII 字符(如汉字)时,可能截断、丢弃或错误解析,导致乱码。解决的核心是:写入前编码,读取后解码,且必须使用兼容性好、语义明确的编码方式。
推荐用 encodeURIComponent / decodeURIComponent
这是目前最标准、最可靠的做法,替代已废弃的 escape/unescape:
-
写入时编码:对 value(及 name,如有非常规字符)调用
encodeURIComponent() -
读取时解码:从
document.cookie解析出值后,立即用decodeURIComponent()还原 - 它基于 UTF-8 编码,能正确处理汉字、emoji、标点等所有 Unicode 字符
- 比
escape更安全——后者不编码+和/,易与表单编码混淆;且已被 ECMAScript 标准弃用
避免用 escape / unescape
虽然旧代码中常见,但存在明显缺陷:
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
-
escape()按照 ISO-8859-1 编码处理,对中文会生成类似%u4F60的 Unicode 转义,而现代浏览器(尤其 Chrome/Firefox)不再支持这种格式 - 不同浏览器对
unescape()的实现不一致,容易出现乱码或解析失败 - 无法正确处理 UTF-8 多字节序列,比如“你好”可能被拆成两个无效字节再分别转义
服务端配合也很关键
如果 Cookie 是由后端(如 Java Servlet、Node.js)设置的,中文同样需要 URL 编码:
- Java 中用
URLEncoder.encode(value, "UTF-8")编码,URLDecoder.decode(value, "UTF-8")解码 - Node.js 中可用
querystring.escape()或直接encodeURIComponent() - 前后端统一用 UTF-8 +
encodeURIComponent,就能保证全链路中文不丢失
封装一个健壮的工具函数
把编码/解码逻辑内聚起来,减少重复出错:
- 设置 Cookie:
document.cookie = `name=${encodeURIComponent(value)}; expires=...; path=/`; - 获取 Cookie:先正则匹配,再
decodeURIComponent(v),注意捕获组边界(如(^|;\s*)name=([^;]*)) - 可直接使用成熟库如 js-cookie,它自动处理编码、路径、domain 等细节
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










