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

为什么要在python中通过字符串声明unicode?

闻人吕恭
2023-03-14
问题内容

我仍在学习python,我对此表示怀疑:

在python 2.6.x中,我通常像这样在文件头中声明编码(如在PEP
0263中

# -*- coding: utf-8 -*-

之后,我的字符串照常编写:

a = "A normal string without declared Unicode"

但是每次我看到python项目代码时,都不会在标头中声明编码。而是在每个这样的字符串处声明它:

a = u"A string with declared Unicode"

有什么不同?目的是什么?我知道Python 2.6.x默认情况下会设置ASCII编码,但是它可以被标头声明覆盖,那么每个字符串声明有什么意义呢?

附录: 似乎我将文件编码和字符串编码混为一谈了。感谢您的解释:)


问题答案:

正如其他人所提到的,这是两件事。

指定时# -*- coding: utf-8 -*-,就是告诉Python保存的源文件是utf-8。Python
2的默认值为ASCII(Python 3的默认值为utf-8)。这只会影响解释器读取文件中字符的方式。

通常,不管编码是什么,将高unicode字符嵌入文件中可能都不是最好的主意。您可以使用字符串unicode转义,这两种编码都可以使用。

当您在字符串u前面声明一个字符串(例如)时u'This is a string',它会告诉Python编译器该字符串是Unicode,而不是字节。这大部分由解释器透明地处理。最明显的区别是您现在可以在字符串中嵌入unicode字符(即u'\u2665'现在合法)。您可以使用from __future__ import unicode_literals使其成为默认值。

这仅适用于Python 2;在Python 3中,默认值为Unicode,您需要b在前面指定a (例如b'These are bytes',以声明字节序列)。



 类似资料:
  • 问题内容: 在Java中,当声明一个字符串变量时,单词“ String”被大写,但是我遇到的其他任何类型都不是(例如,“ int”或“ double”)。为什么是这样?设计师是否只是一些奇怪的任意决定? 问题答案: 为什么在Java中将字符串变量的声明大写? 该类型的资本,因为它是一个 类 ,象,而不是一个原始类型像或(其他类型,你可能跑过)。 作为一个类,遵循Sun提出的Java命名约定。简而言

  • 问题内容: 我在python中有一个很长的字符串: 但是,由于字符串跨越多行,因此python无法将其识别为字符串。我该如何解决? 问题答案: 做同样的事情。

  • 问题内容: 我正在尝试将一些代码从Python转换为C ,以期提高速度并提高生锈的C 技能。当一个天真的实现从标准输入读取线是在Python比C快得多 (见昨天我惊呆了这个)。今天,我终于弄清楚了如何使用合并定界符(与python的split()相似的语义)在C 中拆分字符串,并且现在遇到了deja vu!我的C ++代码需要花费更长的时间才能完成工作(尽管昨天的课程并没有增加一个数量级)。 Py

  • 问题内容: 这些声明和和之间有什么区别? 问题答案: 总是在堆上创建一个新对象 使用字符串池 试试这个小例子: 为避免在堆上创建不必要的对象,请使用第二种形式。

  • 问题内容: 为什么我们要在Java类中声明一个接口? 例如: 问题答案: 当您想在对象中收集一些字段以强调概念时,可以创建一个外部类,也可以创建一个内部类(称为嵌套(静态)或内部)。 如果要强调这个合作类在原始对象使用之外完全没有意义(没有用)的事实,可以将其嵌套/内部。 因此,在处理某些层次结构时,可以描述一个“嵌套” ,它将由包装类的子类实现。 在JDK中,最显著的例子是内部接口中定义的接口,

  • 问题内容: Java7的try-with-resources非常好,但是我无法绕开为什么需要在语句中包括资源声明的问题。我的直觉说以下应该是可能的: las,这会导致语法错误(含糊地期待a )。将类型定义/声明移动到语句中是可行的,这当然会将事物移动到相应的范围内。当我想从封闭中获得更多收益时,我可以弄清楚该如何解决,我对 为什么 编译器需要这样的东西很感兴趣。 问题答案: 您的版本未明确定义应关