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

NodeJS处理非ASCII字符串:编码判断、字符提取与ASCII转换

Node.js + Puppeteer 爬取非ASCII货币字符串处理方案

我正在用Node.js和Puppeteer做网页爬取,拿到的数据示例如下:

{
    "priceValue": "£20,000"
}

因为首字符£是非ASCII字符,需要解决三个问题:


1. 判断字符串编码/字符宽度

Node.js里所有字符串默认都是UTF-16编码,你可以用Buffer验证编码兼容性:

const str = "£20,000";
const buffer = Buffer.from(str);
console.log(buffer.toString('utf8') === str); // 输出true,说明UTF-8编码兼容

字符宽度方面,£是单码点字符,用codePointAt()能直接获取它的Unicode码点:

console.log(str.codePointAt(0)); // 输出163,对应英镑符号的Unicode值

如果要判断字符的显示宽度(区分全角/半角),可以用Intl.Segmenter:

const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
const segments = Array.from(segmenter.segment(str));
console.log(segments[0].segment.length); // 输出1,说明是单宽度字符

2. 提取首字符并添加货币字段

直接提取首字符做判断,再处理数值和新增字段:

const rawData = { priceValue: "£20,000" };
const currencySymbol = rawData.priceValue.charAt(0);

if (currencySymbol === '£') {
  // 提取数值:去掉符号和千分位逗号,转成数字
  const numericPrice = rawData.priceValue.slice(1).replace(/,/g, '');
  rawData.priceValue = parseFloat(numericPrice);
  // 添加货币代码字段
  rawData.priceCurrency = 'GBP';
}

console.log(rawData);
// 输出:{ priceValue: 20000, priceCurrency: 'GBP' }

如果要兼容更多货币符号,直接扩展if条件或者用对象映射就行,比如const symbolMap = { '£': 'GBP', '$': 'USD' }。


3. 转换剩余内容为ASCII格式

示例里的剩余内容20,000本身就是ASCII字符,直接使用即可。如果遇到其他非ASCII的数字/分隔符,用Unicode归一化+正则过滤:

const remainingPart = rawData.priceValue.slice(1);
// 归一化后过滤非ASCII字符
const asciiStr = remainingPart.normalize('NFKD').replace(/[^\x00-\x7F]/g, '');
console.log(asciiStr); // 输出"20,000"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:35:21