Python 我如何摆脱U+;我的代码中有200B(Unicode零宽度空间)?

Python 我如何摆脱U+;我的代码中有200B(Unicode零宽度空间)?,python,python-3.x,unicode,Python,Python 3.x,Unicode,我有一段Python代码: # Subroutine to calculate VAT​ def VAT(Total):​ return Total * 0.05 ​ # Main program​ Total = 100.12​ ValueAddedTax = VAT(Total)​ ToPay = Total + ValueAddedTax​ print("Total £{:.2f} VAT £{:.2f} To pay £{:.2f}".format(Tota

我有一段Python代码:

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

# Main program​
Total = 100.12​
ValueAddedTax = VAT(Total)​
ToPay = Total + ValueAddedTax​
print("Total £{:.2f} VAT £{:.2f} To pay £{:.2f}".format(Total, ValueAddedTax, ToPay))
运行此操作时,我得到:

def VAT(总计):​
^
SyntaxError:标识符中的字符无效
原因是代码包含(UTF-8编码:E2 80 8B),如
hextump-C
的输出所示:

00000000 23 20 53 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 |# Subroutine to | 00000010 63 61 6c 63 75 6c 61 74 65 20 56 41 54 e2 80 8b |calculate VAT...| 00000020 0a 64 65 66 20 56 41 54 28 54 6f 74 61 6c 29 3a |.def VAT(Total):| 00000030 e2 80 8b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 |.... return T| 00000040 6f 74 61 6c 20 2a 20 30 2e 30 35 20 e2 80 8b 0a |otal * 0.05 ....| 00000050 0a 23 20 4d 61 69 6e 20 70 72 6f 67 72 61 6d e2 |.# Main program.| 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....ValueAddedT| 00000080 61 78 20 3d 20 56 41 54 28 54 6f 74 61 6c 29 e2 |ax = VAT(Total).| 00000090 80 8b 0a 54 6f 50 61 79 20 3d 20 54 6f 74 61 6c |...ToPay = Total| 000000a0 20 2b 20 56 61 6c 75 65 41 64 64 65 64 54 61 78 | + ValueAddedTax| 000000b0 e2 80 8b 0a 70 72 69 6e 74 28 22 54 6f 74 61 6c |....print("Total| 000000c0 20 c2 a3 7b 3a 2e 32 66 7d 20 56 41 54 20 c2 a3 | ..{:.2f} VAT ..| 000000d0 7b 3a 2e 32 66 7d 20 54 6f 20 70 61 79 20 c2 a3 |{:.2f} To pay ..| 000000e0 7b 3a 2e 32 66 7d 22 2e 66 6f 72 6d 61 74 28 54 |{:.2f}".format(T| 000000f0 6f 74 61 6c 2c 20 56 61 6c 75 65 41 64 64 65 64 |otal, ValueAdded| 00000100 54 61 78 2c 20 54 6f 50 61 79 29 29 0a |Tax, ToPay)).| 0000010d 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 |计算增值税| 000000 20 0a 64 65 66 20 56 41 54 28 54 6f 74 61 6c 29 3a.def增值税(总计):| 000000 30 e2 80 8b 0a 20 20 72 65 74 75 72 6e 20 54 |。。。。返回T| 000000 40 6f 74 61 6c 20 2a 20 30 2e 30 35 20 e2 80 8b 0a |总计*0.05| 000000 50 0a 23 20 4d 61 69 6e 20 70 72 6f 67 72 61 6d e2 |主程序| 000000 60 80 8b 0a 54 6f 74 61 6c 20 3d 20 30 2e 31 |…总计=100.1| 000000 70 32 e2 80 8b 0a 56 61 6c 75 65 41 64 54 | 2…值添加数据| 000000 80 61 78 20 3d 20 56 41 54 28 54 6f 74 61 6c 29 e2 | ax=增值税(总计)| 000000 90 80 8b 0a 54 6f 50 61 79 20 3d 20 54 6f 74 61 6c |…托佩=总计| 000000 A0 20 2b 20 56 61 6c 75 65 41 64 64 64 54 61 78 |+增值税| 000000 B0 e2 80 8b 0a 70 72 69 6e 74 28 22 54 6f 74 61 6c打印(总计| 000000 C0 20 c2 a3 7b 3a 2e 32 66 7d 20 56 41 54 20 c2 a3 |{:.2f}增值税| 000000 D0 7b 3a 2e 32 66 7d 20 54 6f 20 70 61 79 20 c2 a3{:.2f}需付款| 000000 E0 7b 3a 2e 32 66 7d 22 2e 66 6f 72 6d 61 74 28 54 |{.2f}”。格式(T| 000000 F0 6f 74 61 6c 2c 20 56 61 6c 75 65 41 64总计,增加价值| 00000100 54 61 78 2c 20 54 6f 50 61 79 29 29 0a |税,托付)| 0000010d
我想知道如何去除所有的零宽度空格。

您可以通过使用
sed
将这些字符替换为空字符串来去除这些字符:

$ sed 's/\xe2\x80\x8b//g' INPUTFILE >OUTPUTFILE $sed's/\xe2\x80\x8b//g'INPUTFILE>OUTPUTFILE 或者,就地修改文件:

$ sed -i 's/\xe2\x80\x8b//g' INPUTFILE $sed-i的/\xe2\x80\x8b//g'输入文件
如果我运行了您的代码,我会收到以下信息:“总计100.12英镑增值税5.01英镑支付105.13英镑”您从何处获得此代码?您可以再次编写/键入代码,并确保您没有在代码中键入200b。尝试运行时,会显示无效的不可打印字符。。。这不是特定于编程的,对吗?(零宽度空间也有可能进入其他类型的文档)无论如何,如果使用Vim,只需使用
:s
命令即可。