python返回字符串长度_Python在使用特殊字符时返回错误的字符串长度

The problem is that the first ë́ is being counted twice, or I guess ë is in position 0 and ´ is in position 1.

是的。这就是Unicode定义代码点的方式。通常,您可以要求Python使用Unicode规范化转换字母和单独的“组合”音调符号,如U+0301组合急性重音:>>> unicodedata.normalize('NFC', u'a\u0301')

u'\xe1' # single character: á

然而,Unicode中没有一个字符表示“e带分音符和锐重音”,因为世界上没有任何语言使用过字母“ë́”。(拼音音译有“u带分音符和锐重音”,但没有“e”。)因此字体支持很差;在许多情况下,它呈现得非常糟糕,在我的网络浏览器上是一个凌乱的斑点。

要找出Unicode代码点字符串中的“可编辑点”在哪里是一项棘手的工作,这需要相当多的语言领域知识。这是“复杂文本布局”问题的一部分,该领域还包括双向文本和上下文glpyh形状和连字等问题。要进行复杂的文本布局,您需要一个库,例如Uniscribe on Windows或Pango(通常有一个Python接口)。

另一方面,如果你只想在计数时完全忽略所有的组合字符,那么你可以很容易地去掉它们:def withoutcombining(s):

return ''.join(c for c in s if unicodedata.combining(c)==0)

>>> withoutcombining(u'ë́aúlt')

'\xeba\xfalt' # ëaúlt

>>> len(_)

5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值