【问题标题】:Parse tweet with special characters使用特殊字符解析推文
【发布时间】:2013-12-24 12:09:56
【问题描述】:

我正在尝试解析推文,以便在主题标签、提及等上添加链接。但是,当推文包含特殊字符(如“????”)时,此字符计为 2,例如:

console.log("it was fantastic. Thanks a lot guys ????".length);

此行返回 38,而不是 37。因此,当我使用 twitter api 实体中的“索引”时,一切都发生了变化。

有什么办法可以避免这种情况吗?

提前致谢!

【问题讨论】:

  • 编码可能以 UTF-8 的形式出现,并且控制台字体无法显示该字符。尝试以支持这些特殊字符的字体在屏幕上显示它。
  • @r3mus:问题是关于字符索引和字符串长度,而不是它的显示表示
  • 字符串长度与字符串中的字符有关。那将是一个多字节字符,虽然显示为 1,但占用了 2 的长度。除非我对“多字节字符是位表示适合多个字节的字符”这句话有很大误解。
  • 嘿,或者看:stackoverflow.com/questions/2848462/…——尤其是@Tgr的回答
  • function (a,c){c||(c={short_url_length:22,short_url_length_https:23});var d=b.txt.getUnicodeTextLength(a),e=b.txt.extractUrlsWithIndices(a);b.txt.modifyIndicesFromUTF16ToUnicode(a,e);for(var f=0;f<e.length;f++)d+=e[f].indices[0]-e[f].indices[1],e[f].url.toLowerCase().match(b.txt.regexen.urlHasHttps)?d+=c.short_url_length_https:d+=c.short_url_length;return d} --- 这是来自推特的代码。太无聊了,不想走远了

标签: javascript node.js twitter


【解决方案1】:

您需要处理代理对 - 由两个伪字符组成的字符。签出:https://github.com/eller86/surrogate-pair.js。它看起来有点过时,但完成了工作:

var sp = require('surrogate-pair')

console.log(sp.countCodePoints('it was fantastic. Thanks a lot guys ?')) // 37

但请记住,这会带来大量开销。老实说,我认为进行任何类型的解析都不需要知道 utf8 长度。如果没有机会打破代理对 - 你很好。

【讨论】:

  • 谢谢。但是为什么 Twitter 使用代理字符返回文本,而不是标准的 unicode,utf-8 编码?
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多