字符串中出现非ASCII字符

时间:2019-07-23 12:04:50

标签: python

所以我需要比较2 ,

strings

因此,我将str1 = 'this is my string/ndone' str2 = 'this is my string done' 中的新行替换为str1

' '

当打印两个字符串时,它们是相同的:

new_str = str1.replace('\n', ' ')

但是当使用'this is my string done' 运算符进行比较时,我将这两个字符串转换为数组以查看为什么它们不相等:

==

这是输出:

arr1 = bytearray(str1 , 'utf-8')
print(arr1)

arr2 = bytearray(str2 , 'utf-8')
print(arr2)

str1 = bytearray(b'this is\xc2\xa0my string done') str2 = bytearray(b'this is my string done') 是什么?

5 个答案:

答案 0 :(得分:0)

ConsumerConfig values: auto.commit.interval.ms = 5000 auto.offset.reset = latest 是Unicode字符'NO-BREAK SPACE' (U+00A0)的UTF-8编码。

答案 1 :(得分:0)

使用python unidecode

from unidecode import unidecode

str  = "this is\xc2\xa0my string done"

print(unidecode(str))

o / p

this isA my string done

答案 2 :(得分:0)

==正在比较两个字符串

str1 = 'this is my string\ndone'
str2 = 'this is my string done'
str1 = str1.replace("\n"," ")
print(str1)
if (str1 == str2):
    print("y")
else:
    print("n")

输出为

this is my string done
y

答案 3 :(得分:0)

您只需从第一个字符串中删除UTF-8不间断空格character

str1 = 'this is\xc2\xa0my string done'.replace('\xc2\xa0', ' ')
str2 = 'this is my string done'

print(str1 == str2)

输出:True

答案 4 :(得分:-1)

如其他地方所述,您的字符串中包含“ / n”而不是“ \ n”。 假设您要对所有空白字符进行标准化,这是我一直使用的非常方便的技巧:

string = ' '.join(string.split())

更新:好的,这就是原因:

如果您未指定应使用哪个分隔符string.split(),请按docs:

  

如果未指定sep或为None,则使用不同的拆分算法   应用:连续空格的运行被视为单个   分隔符,结果开头将不包含任何空字符串   或结尾(如果字符串具有前导或尾随空格)。

因此它在whitspaces上分割,并将多个空白视为单个分隔符。我不知道什么字符都被定义为“空格”,但是肯定包括所有常见的可疑字符。然后,当您使用''.join()将列表重新加入到字符串中时,就可以确定所有空格现在都是相同的。