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

使用特殊字符时,Python返回错误的字符串长度

何浩荡
2023-03-14
问题内容

我有一个字符串“ ́aúlt”,我想根据字符位置等获得操纵的长度。问题在于第一个数字被计数两次,或者我猜数字在位置0而数字在位置1。

Python中是否有任何可能的方式来将像“ ́”这样的字符表示为1?

我正在将UTF-8编码用于输出的实际代码和网页。

编辑:关于为什么我需要这样做的一些背景。我正在做一个项目,该项目将英语翻译成塞内卡(一种美洲原住民语言),而„
́出现了很多。某些单词的某些重写规则要求了解字母的位置(自身和周围的字母)以及其他特征,例如重音符号和其他音调标记。


问题答案:

UTF-8是一种unicode编码,它对特殊字符使用多个字节。如果您不希望编码字符串的长度,只需对其进行解码并len()unicode对象(而不是str对象!)上使用。

这里有些例子:

>>> # creates a str literal (with utf-8 encoding, if this was
>>> # specified on the beginning of the file):
>>> len('ë́aúlt') 
9
>>> # creates a unicode literal (you should generally use this
>>> # version if you are dealing with special characters):
>>> len(u'ë́aúlt') 
6
>>> # the same str literal (written in an encoded notation):
>>> len('\xc3\xab\xcc\x81a\xc3\xbalt') 
9
>>> # you can convert any str to an unicode object by decoding() it:
>>> len('\xc3\xab\xcc\x81a\xc3\xbalt'.decode('utf-8')) 
6

当然,您也可以unicode像在对象中那样访问对象中的单个字符str(它们都继承自对象basestring,因此具有相同的方法):

>>> test = u'ë́aúlt'
>>> print test[0]
ë

如果您开发本地化的应用程序,通常最好在unicode内部仅使用-
objects,方法是解码得到的所有输入。工作完成后,您可以再次将结果编码为’UTF-8’。如果坚持这一原则,您将永远不会看到服务器因任何内部错误而崩溃UnicodeDecodeError;)

PS:请注意,strunicode数据类型在Python 3中已发生了显着变化。在Python
3中,只有unicode字符串和纯字节字符串不能再混合使用。这应该有助于避免unicode处理的常见陷阱…

问候克里斯托夫



 类似资料:
  • 问题内容: 我正在使用urllib从网站获取html字符串,并且需要将html文档中的每个单词放入列表中。 这是我到目前为止的代码。我不断收到错误消息。我还复制了以下错误。 这是错误。 问题答案: str.replace是您要执行的操作错误的函数(除了使用不正确之外)。您想用空格代替集合的任何字符,而不是用单个空格代替整个集合(后者是replace的作用)。您可以使用以下翻译: 这将创建一个映射,

  • 我的应用程序是应用程序。为了使它变得非常简单,我有,它只是写hello。当在中执行时,这可以很好地工作。

  • 要转义这些字符,请在字符前面使用\。例如,要搜索(1+1):2,请使用以下查询: 为此,我使用方法: 我使用经典分析器是因为我注意到标准分析器在转义特殊字符方面存在一些问题。 null

  • 我想检查一个字符串是否包含特殊字符,比如!@#$%^&*.,<>/\'“;:?如果字符串至少包含其中一个字符,则返回true。 我尝试使用以下regex脚本:

  • 我有一个从xml文档中读取数据的程序。在这个xml文档中,一些属性包含特殊字符,如“\n”、“t”等。 有没有一种简单的方法可以将所有这些字符串替换为实际的字符,或者我必须像下面的例子一样为每个字符手动替换? 手动示例: 编辑: 我正在寻找某种方法来处理字符串,就像这样的转义字符串(尽管我知道这是行不通的)

  • 关于字符集和替代字形 除键盘上可看到的字符之外,字体中还包括许多字符。根据字体的不同,这些字符可能包括连字、分数字、花饰字、装饰字、序数字、标题和文体替代字、上标和下标字符、变高数字和全高数字。字形是特殊形式的字符。例如,在某些字体中,大写字母 A 有几种形式可用,如花饰字或小型大写字母。 插入替代字形的方式有两种: 可以使用 “字形 ”面板来查看和插入任何字体中的字形。 可以使用 “OpenTy