当前位置: 首页 > 面试题库 >

u'前缀和python中的unicode()有什么区别?

邵飞白
2023-03-14
问题内容

u''prefix和之间有什么区别unicode()

# -*- coding: utf-8 -*-
print u'上午'  # this works
print unicode('上午', errors='ignore') # this works but print out nothing
print unicode('上午') # error

对于第三个print错误,错误显示:UnicodeDecodeError:’ascii’编解码器无法解码位置0的字节0xe4

如果我有一个包含非ASCII字符的文本文件,例如“上午”,如何阅读并正确打印出来?


问题答案:
  • u'..' 是一个字符串文字,并根据源编码声明对字符进行解码。

  • unicode()是一个将另一种类型转换为unicode对象的函数,您已为其提供了 字节字符串常量 。它将根据默认的ASCII编解码器解码字节字符串。

因此,您使用了不同类型的文字符号创建了一个字节字符串对象,然后尝试将其转换为unicode()对象,该操作失败了,因为str->unicode转换的默认编解码器为ASCII。

两者是完全不同的野兽。如果要使用后者,则需要为其提供明确的编解码器:

print unicode('上午', 'utf8')

两者的使用方式与使用0xFFint('0xFF', 0)关联的方式相同;前者使用十六进制表示法定义值255的整数,后者使用该int()函数从字符串中提取整数。

另一种方法是使用str.decode()方法:

print '上午'.decode('utf8')

除非您知道自己在做什么,否则不要尝试使用错误处理程序(例如ignore''replace')。'ignore'例如,尤其是在选择错误的编解码器时可以掩盖潜在的问题。

您可能需要阅读Python和Unicode:

  • Ned Batchelder的实用Unicode

  • 每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky

  • 在Python的Unicode指南



 类似资料:
  • Unicode和ASCII的确切区别是什么? ASCII总共有128个字符(扩展集中有256个)。 Unicode字符有大小规格吗?

  • 我正在编写Rust by Example教程,其中包含以下代码片段: 我完全混淆了-对于,从返回的迭代器产生引用,从产生值,但对于数组,这些迭代器是相同的? 这两种方法的用例/API是什么?

  • 问题内容: 我在此官方文档中进行了搜索,以查找python中的json.dump()和json.dumps()之间的区别。显然,它们与文件写入选项有关。 但是,它们之间的详细区别是什么?在什么情况下,一个比另一个具有更多的优势? 问题答案: 除了文档所说的内容外,没有什么可添加的。如果要将JSON转储到文件/套接字或其他文件中,则应使用。如果只需要它作为字符串(用于打印,解析或其他操作),则使用(

  • 问题内容: python中的return和break有什么区别?请解释它们在循环和函数中的确切作用?谢谢 问题答案: 用来过早地结束循环,而y是用于将返回值传递回函数调用者的关键字。如果使用时不带参数,则仅终止函数并返回到之前执行代码的位置。 在某些情况下,它们可以实现相同的目的,但以下两个示例可让您大致了解它们的用途 使用 遍历值列表并在我们看到数字时中断。 将产生以下输出 使用 这是函数在根据

  • 本文向大家介绍PHP中的'@'前缀有什么作用?,包括了PHP中的'@'前缀有什么作用?的使用技巧和注意事项,需要的朋友参考一下 “ @”符号可防止错误显示在屏幕上。 PHP支持错误控制运算符,即符号(@)。在PHP表达式之前添加该表达式时,将忽略使用该表达式时可能生成的错误消息。 如果启用track_errors属性,则表达式生成的错误消息将保存在名为$php_errormsg的变量中。每次发生错

  • 问题内容: 和有什么区别? 问题答案: 区别在于中不存在,而确实存在。实际上,已将旧名称重命名为,而旧名称已消失,但可以使用轻松地对其进行模拟)。(请记住这是邪恶的。如果可能,请尝试使用更安全的方法来解析输入。

  • 问题内容: 和Python 3有什么区别? 问题答案: 区别在于Python 3.x中不存在,而确实存在。实际上,已将旧名称重命名为,而旧名称已消失,但可以使用轻松地对其进行模拟)。(请记住这是不好的。如果可能,请尝试使用更安全的方法来解析你的输入。) 不同之处在于,Python 3 .x中不存在,而输入()则不存在。实际上,旧的已重命名为input(),旧的已不复存在,但可以使用轻松模拟。(记住

  • 问题内容: 在Python 2中,返回浮点值。尽管对我而言并不明显,但我发现了一些解释,以阐明为什么使用return float可能有用(对于诸如和的情况)。 但是,在Python 3中,返回整数(并为前面提到的特殊情况返回溢出错误)。 那么和现在之间有什么区别(如果有)? 问题答案: 几轮 下来 。 截断 。使用负数时,区别很明显: 四舍五入为负数表示它们从0移开,被截断将其移近0。 换句话说,