I tried the code below:
console.log(JSON.stringify({ test: "\u30FCabc" }));
It gives the output below:
'{"test":"ーabc"}'
We know that mainly JSON.stringify()
method converts a JavaScript object or value to a JSON string. And as per JSON std (https://www.json.org/json-en.html) we should be able to store \u30FC
. Then why "\u30FC"
is converted to "ー"
?
CodePudding user response:
Then why "\u30FC" is converted to "ー" ?
- The JavaScript engine reads your string literal and does that conversion to create the in-memory string
- The object containing that string is passed to
JSON.stringify
JSON.stringify
encodes the object as JSON and represents theー
as a literalー
becauseJSON.stringify
was written in such a way to prefer literal characters over escape sequences where the JSON data format allows either.
Some JSON encoders let you control this, for example, in PHP, compare:
<?php echo json_encode('ーabc', JSON_UNESCAPED_UNICODE); ?>
and
<?php echo json_encode('ーabc'); ?>
… but JavaScript's JSON.stringify
doesn't have any such option.