JSON.stringify为啥会把中文名称转换成乱码
时间: 2023-08-15 18:09:44 浏览: 256
JSON.stringify() 方法在将对象转换为 JSON 字符串时,默认会对非 ASCII 字符进行转码。这是因为 JSON 标准规定,JSON 字符串必须使用 Unicode 编码,而非 ASCII 字符需要进行转义,以确保数据的完整性和可读性。
当遇到中文字符时,JSON.stringify() 方法会将其转换为 Unicode 转义序列,例如 "\uXXXX" 的形式。这种转义序列在控制台中显示为乱码,但在传输和解析 JSON 数据时是可以正确处理的。
如果希望在字符串化过程中保留中文字符而不进行转义,可以使用第二个参数 replacer 或者 toJSON() 方法来自定义转换过程。例如,可以使用 replacer 函数来替换中文字符为其他形式,或者在对象上实现 toJSON() 方法以返回经过处理的数据。
以下是一个例子,展示了如何使用 replacer 函数来保留中文字符:
```javascript
const obj = {
name: "中文名称"
};
const jsonString = JSON.stringify(obj, (key, value) => {
if (typeof value === "string") {
return value.replace(/[\u4e00-\u9fa5]/g, (str) => {
return "\\u" + str.charCodeAt(0).toString(16);
});
}
return value;
});
console.log(jsonString);
```
输出结果为:`{"name":"\u4e2d\u6587\u540d\u79f0"}`
这样可以保留中文字符,但需要注意的是,解析该 JSON 字符串时,需要进行相应的处理才能得到正确的中文字符。
阅读全文