【问题标题】:How do I get rid of U+200B (Unicode zero width space) in my code?如何摆脱代码中的 U+200B(Unicode 零宽度空间)?
【发布时间】:2021-01-18 10:26:00
【问题描述】:

我有这段 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(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 |计算增值税...| 00000020 0a 64 65 66 20 56 41 54 28 54 6f 74 61 6c 29 3a |.def 增值税(总计):| 00000030 e2 80 8b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 |.... 返回 T| 00000040 6f 74 61 6c 20 2a 20 30 2e 30 35 20 e2 80 8b 0a |总计 * 0.05 ....| 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 |...总计 = 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 = 增值税(总计)。| 00000090 80 8b 0a 54 6f 50 61 79 20 3d 20 54 6f 74 61 6c |...ToPay = 总计| 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 54 6f 74 61 6c |....print("总计| 000000c0 20 c2 a3 7b 3a 2e 32 66 7d 20 56 41 54 20 c2 a3 | ..{:.2f} 增值税 ..| 000000d0 7b 3a 2e 32 66 7d 20 54 6f 20 70 61 79 20 c2 a3 |{:.2f} 支付..| 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 |总计,增值| 00000100 54 61 78 2c 20 54 6f 50 61 79 29 29 0a |Tax, ToPay))。| 0000010d

我想知道如何摆脱所有的零宽度空格。

【问题讨论】:

  • 如果我运行您的代码,我会收到:“Total £100.12 VAT £5.01 To pay £105.13”
  • 你从哪里得到这个代码?
  • 您可以再次编写/键入您的代码,并确保您没有在代码中键入 200b。
  • 当尝试运行它时显示无效的不可打印字符
  • ...这并不是真正的编程特定的,对吧? (零宽度空间也可能进入其他类型的文档)无论如何,如果您使用 Vim,您可以使用 :s 命令。

标签: python python-3.x unicode


【解决方案1】:

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

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

或者,就地修改文件:

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

【讨论】:

    猜你喜欢
    • 2013-12-19
    • 2016-08-21
    • 2014-09-16
    • 2011-01-31
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多