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

Python-用ASCII字符替换Unicode表情符号

如何解决《Python-用ASCII字符替换Unicode表情符号》经验,为你挑选了1个好方法。

我当前的一个周末项目有一个问题。我正在编写一个Python脚本,该脚本从不同的来源获取一些数据,然后将所有内容吐给esc-pos打印机。您可能会想到pos打印机与emoji表情不完全一样...

所以这样的文字:

??!!!!!!!!

给我这个字符串:

'\u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d'

打印机输出的结果与我当然想要的完全不同。所以我需要用其他东西代替这些非ASCII字符。我不太在乎第一个字符,但我确实在乎表情符号。使用类似的东西:unidecode(str(text))至少会去除它们,但是我想将它们转换为更有用的东西。可以进入[:-D]之类的经典表情符号,也可以进入[带有心形眼睛的笑脸]。

我的问题是...该怎么做?手动为最常见的表情符号创建查找表似乎有些乏味,因此我想知道是否还有其他事情可以做。



1> user3082900..:

通过技巧unicodedata.name和进一步的研究,我设法将这件事组合在一起:

import unicodedata
from unidecode import unidecode

def deEmojify(inputString):
    returnString = ""

    for character in inputString:
        try:
            character.encode("ascii")
            returnString += character
        except UnicodeEncodeError:
            replaced = unidecode(str(character))
            if replaced != '':
                returnString += replaced
            else:
                try:
                     returnString += "[" + unicodedata.name(character) + "]"
                except ValueError:
                     returnString += "[x]"

    return returnString

基本上,它首先尝试找到最合适的ascii表示形式,如果失败,则尝试使用unicode名称,即使失败,也将其简单替换为一些简单的标记。

例如,使用以下字符串:

abcdše?f?gžhÅiØjÆk??? !!!!!!!!

并运行功能:

string = u'abcdše?f?gžhÅiØjÆk? \u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d'
print(deEmojify(string))

将产生以下结果:

abcdsedfcgzhAiOjAEk [x] Ke Ai !!!!!!!! [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的微笑脸] [带有伸出舌头和密闭眼睛的脸]


推荐阅读
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 题目描述:给定一组学生和课程,每个学生可以参加多个课程。任务是判断是否可以从这些学生中选出一个由 P 名学生组成的委员会,满足以下条件:每名学生代表不同的课程,且每个课程都有代表。时间限制:20000/10000 MS (Java/Others),内存限制:65536/32768 K (Java/Others)。 ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
  • 开发笔记:1035 Password (20) ... [详细]
  • 作为一名Android应用开发新手,我在尝试将MediaPlayer处理逻辑从MainActivity分离到另一个类时遇到了问题。尽管搜索了很长时间,但仍未找到满意的解决方案。 ... [详细]
  • 本文详细介绍了 Android 开发中常用的单位 dip(设备独立像素)、px(像素)、pt(点)和 sp(可缩放像素),并解释了它们在不同屏幕密度下的应用。 ... [详细]
  • 本文介绍了如何使用Aspose库将Office文件(如Word、PowerPoint)转换为HTML文件,并详细说明了在转换过程中可能出现的乱码问题及其解决方案。 ... [详细]
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • Linux中tput命令怎么用
    这篇文章主要介绍Linux中tput命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux常用命令tput命令将通过ter ... [详细]
  • Spring 中策略模式的应用:Resource 接口详解
    本文探讨了在 Spring 框架中如何利用 Resource 接口实现资源访问策略。Resource 接口作为资源访问策略的抽象,通过多种实现类支持不同类型的资源访问。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
author-avatar
fengzi199171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有