热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R可以读取html编码的表情符号吗?

如何解决《R可以读取html编码的表情符号吗?》经验,为你挑选了1个好方法。

tl; dr:表情符号不是有效的HTML实体;已使用UTF-16数字代替Unicode代码点来构建它们。我在答案的底部描述了一种算法,将其转换为有效的XML。


找出问题

R绝对可以处理表情符号:

实际上,在R中存在一些用于处理表情符号的软件包。例如,emojifont和emo软件包都允许您基于Slack样式的关键字检索表情符号。这只是从HTML转义格式获取源字符以便转换它们的问题。

xml2::read_xml似乎可以与其他HTML实体(例如“&”号或双引号)一起使用。我查看了这个SO答案,以查看HTML实体上是否存在任何特定于XML的约束,并且看起来它们存储的表情符号很好。所以我尝试将您表情符号中的表情符号代码更改为该答案中的表情符号代码:

body="Hug emoji: 😀😃"

而且,可以肯定的是,它们被保留了(尽管它们显然不再是拥抱表情符号了):

> test8 = read_html('Desktop/test.xml')
> test8 %>% xml_child() %>% xml_child() %>% xml_child() %>% xml_attr('body')
[1] "Hug emoji: \U0001f600\U0001f603"

我在此页面上查找了拥抱表情符号,但没有 十进制HTML实体��。看来表情符号的UTF-16十进制代码已包装在&#和中;

总之,我认为答案是您的表情符号实际上不是有效的HTML实体。如果您无法控制源,则可能需要进行一些预处理以解决这些错误。

那么,为什么浏览器会正确转换它们呢?我想知道浏览器在这些方面是否更具灵活性,并对这些代码可能是什么进行了一些猜测。我只是在推测。


将UTF-16转换为Unicode代码点

经过更多调查后,看来有效的emoji表情HTML实体使用Unicode代码点(如果为,则为十进制;如果为&#...;,则为十六进制&#x...;)。Unicode代码点不同于UTF-8或UTF-16代码。(该链接解释了很多关于如何的表情符号和其他字符编码不同,BTW!很好看的。)

因此,我们需要将源数据中使用的UTF-16代码转换为Unicode代码点。参考有关UTF-16的Wikipedia文章,我已经验证了它是如何完成的。每个Unicode代码点(我们的目标)是20位数字或5个十六进制数字。从Unicode转换为UTF-16时,您将其分成两个10位数字(中间的十六进制数字被切成两半,其中两位进入每个块),对它们进行一些数学运算并得出结果) 。

向后退,就像您想要的那样,是这样完成的:

您的UTF-16十进制数字(目前位于两个单独的块中)为 55358 56599

分别将这些块转换为十六进制可得出 0x0d83e 0x0dd17

0xd800从第一个区块减去0xdc00第二个区块即可0x3e 0x117

将它们转换为二进制,将其填充到10位并连接它们,这是 0b0000 1111 1001 0001 0111

然后我们将其转换回十六进制,即 0x0f917

最后,我们添加0x100000x1f917

因此,我们的(十六进制)HTML实体为🤗。或者,以十进制表示&#129303

因此,要对该数据集进行预处理,您需要提取现有数字,使用上述算法,然后将结果放回去(使用1 &#...;而不是2)。


在R中显示表情符号

据我所知,在R控制台中没有打印表情符号的解决方案:它们总是以"U0001f600"(或您所拥有的)形式出现。但是,我上面描述的软件包可以在某些情况下帮助您绘制表情符号(我希望扩展ggflags以便在某些时候显示任意全彩表情符号)。他们还可以帮助您搜索表情符号以获取其代码,但是使用代码AFAIK却无法获取名称。但是,如果您已将表情符号代码提取到一列中,则可以尝试将表情符号列表从emojilib R导入R并与数据框进行联接,以获取英文名称。



1> rensa..:

tl; dr:表情符号不是有效的HTML实体;已使用UTF-16数字代替Unicode代码点来构建它们。我在答案的底部描述了一种算法,将其转换为有效的XML。


找出问题

R绝对可以处理表情符号:

实际上,在R中存在一些用于处理表情符号的软件包。例如,emojifont和emo软件包都允许您基于Slack样式的关键字检索表情符号。这只是从HTML转义格式获取源字符以便转换它们的问题。

xml2::read_xml似乎可以与其他HTML实体(例如“&”号或双引号)一起使用。我查看了这个SO答案,以查看HTML实体上是否存在任何特定于XML的约束,并且看起来它们存储的表情符号很好。所以我尝试将您表情符号中的表情符号代码更改为该答案中的表情符号代码:

body="Hug emoji: 😀😃"

而且,可以肯定的是,它们被保留了(尽管它们显然不再是拥抱表情符号了):

> test8 = read_html('Desktop/test.xml')
> test8 %>% xml_child() %>% xml_child() %>% xml_child() %>% xml_attr('body')
[1] "Hug emoji: \U0001f600\U0001f603"

我在此页面上查找了拥抱表情符号,但没有 十进制HTML实体��。看来表情符号的UTF-16十进制代码已包装在&#和中;

总之,我认为答案是您的表情符号实际上不是有效的HTML实体。如果您无法控制源,则可能需要进行一些预处理以解决这些错误。

那么,为什么浏览器会正确转换它们呢?我想知道浏览器在这些方面是否更具灵活性,并对这些代码可能是什么进行了一些猜测。我只是在推测。


将UTF-16转换为Unicode代码点

经过更多调查后,看来有效的emoji表情HTML实体使用Unicode代码点(如果为,则为十进制;如果为&#...;,则为十六进制&#x...;)。Unicode代码点不同于UTF-8或UTF-16代码。(该链接解释了很多关于如何的表情符号和其他字符编码不同,BTW!很好看的。)

因此,我们需要将源数据中使用的UTF-16代码转换为Unicode代码点。参考有关UTF-16的Wikipedia文章,我已经验证了它是如何完成的。每个Unicode代码点(我们的目标)是20位数字或5个十六进制数字。从Unicode转换为UTF-16时,您将其分成两个10位数字(中间的十六进制数字被切成两半,其中两位进入每个块),对它们进行一些数学运算并得出结果) 。

向后退,就像您想要的那样,是这样完成的:

您的UTF-16十进制数字(目前位于两个单独的块中)为 55358 56599

分别将这些块转换为十六进制可得出 0x0d83e 0x0dd17

0xd800从第一个区块减去0xdc00第二个区块即可0x3e 0x117

将它们转换为二进制,将其填充到10位并连接它们,这是 0b0000 1111 1001 0001 0111

然后我们将其转换回十六进制,即 0x0f917

最后,我们添加0x100000x1f917

因此,我们的(十六进制)HTML实体为🤗。或者,以十进制表示&#129303

因此,要对该数据集进行预处理,您需要提取现有数字,使用上述算法,然后将结果放回去(使用1 &#...;而不是2)。


在R中显示表情符号

据我所知,在R控制台中没有打印表情符号的解决方案:它们总是以"U0001f600"(或您所拥有的)形式出现。但是,我上面描述的软件包可以在某些情况下帮助您绘制表情符号(我希望扩展ggflags以便在某些时候显示任意全彩表情符号)。他们还可以帮助您搜索表情符号以获取其代码,但是使用代码AFAIK却无法获取名称。但是,如果您已将表情符号代码提取到一列中,则可以尝试将表情符号列表从emojilib R导入R并与数据框进行联接,以获取英文名称。


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • mysql字符集和表字符集_Mysql数据库表引擎与字符集
    Mysql数据库表引擎与字符集1.服务器处理客户端请求其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句) ... [详细]
  • 带你把MySQL索引吃透了
    数据库|mysql教程mysql数据库-mysql教程支付宝网页支付源码,ubuntu脑图,tomcat显示默认主页,爬虫听书软件,php可以开发什么软件,天津关键词seo排名优化 ... [详细]
author-avatar
mobiledu2502927213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有