特殊字符仅作为字符串的一部分打印,而不是独立打印(python3)

时间:2019-01-17 13:04:47

标签: python-3.x utf-8 utf

我处理包含变音符号的字符串。当我打印字符串时,它可以正确打印:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
s = "ˈtau̯rum"
print(s)
> ˈtau̯rum

但是,当我遍历字符串并独立打印每个字符时,某些字符不会被打印:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
s = "ˈtau̯rum"
for c in s:

    print (c)

>
ˈ
t
a
u

r
u
m

2 个答案:

答案 0 :(得分:0)

正如评论所建议的,打印问题很可能是由于终端如何处理显示Unicode字符而引起的。您可以通过将其编码为utf-8个字节或使用内置的ord()来检查该字符是否符合您的期望。

  

给出一个代表一个Unicode字符的字符串,返回代表该字符的Unicode代码点的整数。例如,ord('a')返回整数97,而ord('€')(欧元符号)返回8364。这是chr()的反函数。

例如

Python 3.7.1 (default, Oct 23 2018, 19:19:42)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.1.1 -- An enhanced Interactive Python. Type '?' for help.

IIn [1]: s = "ˈtau̯rum"                                                                                                 

In [2]: print(s)
ˈtau̯rum

In [3]: for c in s:
   ...:     print(c, c.encode('utf-8'), ord(c))
   ...:
ˈ b'\xcb\x88' 712
t b't' 116
a b'a' 97
u b'u' 117
̯  b'\xcc\xaf' 815
r b'r' 114
u b'u' 117
m b'm' 109

答案 1 :(得分:0)

您可以使用以下代码:

import unicodedata
s = "ˈtau̯rum" 

a = ""
for c in s:
    if unicodedata.combining(c):
        a += c
    else:
        print(a)
        a = c
else:
    print(a)

通过这种方式,您正在组合组合字符。您可以将print(a)替换为必须保持在一起的代码点列表存储。