我有点卡住了。我有Python代码与C ++包装器对话,该包装器具有使用String作为参数的Boost库。在我的python代码中,如果我使用str(x),我可以正确地与这个包装器对话。问题是如果我使用str(“£”)它会返回一个转义码。
如果字符串本身返回十六进制代码,我怎么能把它作为字符串传递给C ++方法。
我的第一个想法是使用编码器并删除角色。第二个想法是使用javascript服务器端代码来阻止用户在第一个实例中输入非ascii字符。
这是JS Lint。 http://jsfiddle.net/M5Xqg/有人可以调整为什么它将'£'作为有效的ascii字符返回。
答案 0 :(得分:2)
你用str(“£”)得到'\ xc2 \ xa3',因为你的Python解释器将“£”符号转换为UTF-8(我认为这是你的默认语言环境)。如果你想获得ASCII字符串,你应该做“£”.encode('ascii'),但你会得到一个UnicodeDecodeError异常,因为它不是ASCII字符,所以你需要一些过滤。
即使您使用JS在客户端进行检查,仍然可以使用curl工具或任何类似的工具直接进行请求,因此最好在客户端进行检查并在服务器端进行过滤。
在服务器端,您可以执行以下操作:
>>> s = "ascii text 123 £ 456 go go"
>>> t = filter(lambda x: x.isalnum(), s)
>>> print t
"ascii text 123 456 go go"
但是此代码将过滤所有非字母数字字符。如果要允许所有可打印的ASCII字符,请尝试改为:
>>> import string
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> t = filter(lambda x: x in string.printable, s)
>>> print t
'ascii text 123 456 go go'
答案 1 :(得分:0)
如果库包含在Python代码中,为什么不用Python来检查,而不是Javascript?错误是Python不会让你做的。在你的if语句中:
(asciiNumber = 20)
应该是:
(asciiNumber == 20)