如何在我的代码中去除U+200B(Unicode零宽空格)?

6

我有这段Python代码:

# Subroutine to calculate VAT​
def VAT(Total):​
    return Total * 0.05 ​

# Main program​
Total = 100.12ValueAddedTax = VAT(Total)​
ToPay = Total + ValueAddedTax​
print("Total £{:.2f} VAT £{:.2f} To pay £{:.2f}".format(Total, ValueAddedTax, ToPay))

运行时,我得到:
    def VAT(Total):​
                   ^
SyntaxError: invalid character in identifier

原因是代码中包含U+200B ZERO WIDTH SPACE(UTF-8编码:E2 80 8B),如hexdump -C的输出所示:

00000000  23 20 53 75 62 72 6f 75  74 69 6e 65 20 74 6f 20  |# 子程序用于计算增值税...|
00000010  63 61 6c 63 75 6c 61 74  65 20 56 41 54 e2 80 8b  |计算增值税的函数:def VAT(Total):|
00000020  0a 64 65 66 20 56 41 54  28 54 6f 74 61 6c 29 3a  |.返回 Total * 0.05 ....|
00000030  e2 80 8b 0a 20 20 20 20  72 65 74 75 72 6e 20 54  |....    return Total * 0.05 |
00000040  6f 74 61 6c 20 2a 20 30  2e 30 35 20 e2 80 8b 0a  |....|
00000050  0a 23 20 4d 61 69 6e 20  70 72 6f 67 72 61 6d e2  |.# 主程序。|
00000060  80 8b 0a 54 6f 74 61 6c  20 3d 20 31 30 30 2e 31  |...Total = 100.1|
00000070  32 e2 80 8b 0a 56 61 6c  75 65 41 64 64 65 64 54  |2....ValueAddedTax = VAT(Total).|
00000080  80 8b 0a 54 6f 50 61 79  20 3d 20 54 6f 74 61 6c  |...ToPay = Total + ValueAddedTax|
000000a0  20 2b 20 56 61 6c 75 65  41 64 64 65 64 54 61 78  |.|
000000b0  e2 80 8b 0a 70 72 69 6e  74 28 22 总计:{:.2f} 增值税:{:.2f} 应付:{:.2f}".format(T| |otal, ValueAddedTax, ToPay))|
000000c0  6f 74 61 6c 2c 20 56 61  6c 75 65 41 64 64 65 64  | |
000000d0  54 61 78 2c 20 54 6f 50  61 79 29 29 0a           |)).|
0000010d
我想知道如何去除所有的零宽空格。

如果我运行你的代码,我会收到这个结果:"总计 £100.12,增值税 £5.01,应付款项 £105.13"。 - Dieter
1
你从哪里得到这段代码的? - mkrieger1
1
你可以重新编写/输入你的代码,并确保在代码中不要输入200b。 - Ardiya
1
这并不是特定于编程的问题,对吧?(零宽空格也可能出现在其他类型的文档中)无论如何,如果您使用Vim,可以直接使用:s命令。 - user202729
@mkrieger1:我认为这个问题的起源通常是从网页或其他非编辑器(例如终端)中“复制粘贴”。拥有这样的额外字符并不罕见。 - Giacomo Catenazzi
显示剩余2条评论
1个回答

8

您可以使用 sed 将这些字符替换为空字符串以去除它们:

$ sed 's/\xe2\x80\x8b//g' INPUTFILE >OUTPUTFILE

或者,直接修改文件:

$ sed -i 's/\xe2\x80\x8b//g' INPUTFILE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接