ai didi

Javascript charAt() 打破多字节字符串

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:31 24 4
gpt4 key购买 nike

此代码与 nodejs v0.10.21 不兼容

#!/usr/bin/env node
"use strict";

var urlEncoded = 'http://zh.wikipedia.org/wiki/%F0%A8%A8%8F';
var urlDecoded = decodeURI( urlEncoded );
var urlLeafEncoded = urlEncoded.substr( 29 );
var urlLeafDecoded = decodeURIComponent( urlLeafEncoded );
var urlLeafFirstCharacterDecoded = urlLeafDecoded.charAt( 0 );
var urlLeafFirstCharacterEncoded = encodeURIComponent( urlLeafFirstCharacterDecoded );

console.log( 'URL encoded = ' + urlEncoded );
console.log( 'URL decoded = ' + urlDecoded );
console.log( 'URL leaf encoded = ' + urlLeafEncoded );
console.log( 'URL leaf decoded = ' + urlLeafDecoded );
console.log( 'URL leaf first character encoded = ' + urlLeafEncoded );
console.log( 'URL leaf first character decoded = ' + urlLeafDecoded );

出现以下错误

var urlLeafFirstCharacterEncoded = encodeURIComponent( urlLeafFirstCharacterDe
^
URIError: URI malformed
at encodeURIComponent (native)
at Object.<anonymous> (/media/data/tmp/mwoffliner/test.js:9:36)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3

Javascript 过去常常正确处理多字节字符,但在那种情况下却不行。看起来虽然“%F0%A8%A8%8F”代表一个汉字,javascript却认为是两个汉字。我很困惑这是否是 javascript 运行时中的错误、某种编码问题或我这边的误解。

最佳答案

𨨏位于 BMP 之外,并且由于 Javascript 仅使用 2 个字节来存储字符,因此表示为 surrogate pair .虽然 encodeURIComponent 可以对代理项对进行操作并为它们生成正确的 UTF8 编码,但它不能单独读取代理项。因此,虽然 encodeURIComponent("𨨏") 工作正常,但 encodeURIComponent("𨨏".charAt(0)) 会失败。

参见 http://mathiasbynens.be/notes/javascript-encoding更多细节。另外,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent专门记录此用例。

关于Javascript charAt() 打破多字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752988/

24 4 0
文章推荐: node.js - 合并两个视频流并保存为一个文件
文章推荐: PHP - 选择两个字符之间的字符串的一部分
文章推荐: php - PhpQuery 是如何工作的?试图获取 <title> 标签的值
文章推荐: php - 日语的 sort()
搜寻专家
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com