首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将HEX值转换为Unicode字符

将HEX值转换为Unicode字符
EN

Code Review用户
提问于 2016-11-18 15:23:49
回答 1查看 7K关注 0票数 4

我有一个用于社交网络的小型机器人,它接受消息"unicode XXXX XXXX XXXX ...",其中XXXX - HEX值应该转换为Unicode字符。最初,命令只接受一个HEX值,并且运行得很好,而且速度很快。在我修改代码以接受多个值后,进程速度减慢(响应1-2秒,响应4-5秒)。

这是我的代码:

代码语言:javascript
复制
def unic(msg):
    if type(msg) == list:
        msg.pop(0) # removing "unicode" word
        try:
            sym = '' # final result
            correct = [] # correct HEX values to be converted
            for code in msg:
                try:
                    chr(int(code, 16))
                    correct.append(code)
                except:
                    pass
            if correct != []:
                for code in correct:
                    sym = sym + chr(int(code, 16))
            elif correct == []:
                return c_s.get('incorrect') # returning error message from common strings list
            if sym != '':
                return sym
        except:
            return c_s.get('incorrect')

我应该在这里改变什么来加速进程?欢迎任何建议。

EN

回答 1

Code Review用户

回答已采纳

发布于 2016-11-18 15:47:57

只有在需要时才使用try-except。你的外力应该是徒劳的。您还应该执行一次chr(int(code, 16)),因为两次运行它没有好处,它只需要花费周期。

您的输出是可怕的,如果没有有效的输入,您将从显式地沉默它到返回一个错误。如果您有一组项,但它们没有添加到sym中,则返回None。您需要选择您的函数是如何工作的。要么删除无效字符,要么引发错误。

执行上述操作将删除一半的代码。我还会更改except以捕获某些错误,例如ValueError,否则您的程序很容易掩盖错误。

字符串是不可变的,因此sym = sym + chr(int(code, 16))需要很长的时间。相反,构建一个列表并对其进行''.join

最后,return c_s.get('incorrect')是一个巨大的危险标志,移除这些和raise异常。

这能让你:

代码语言:javascript
复制
def unicode_(msg):
    new_msg = []
    for char in msg:
        try:
            char = chr(int(char, 16))
        except ValueError:
            char = '?'
        new_msg.append(char)
    return ''.join(new_msg)
票数 6
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/147433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档