Javascript / Python字符ASCII检查

时间:2012-02-24 16:37:18

标签: javascript python html django ascii

我有点卡住了。我有Python代码与C ++包装器对话,该包装器具有使用String作为参数的Boost库。在我的python代码中,如果我使用str(x),我可以正确地与这个包装器对话。问题是如果我使用str(“£”)它会返回一个转义码。

如果字符串本身返回十六进制代码,我怎么能把它作为字符串传递给C ++方法。

我的第一个想法是使用编码器并删除角色。第二个想法是使用javascript服务器端代码来阻止用户在第一个实例中输入非ascii字符。

这是JS Lint。 http://jsfiddle.net/M5Xqg/有人可以调整为什么它将'£'作为有效的ascii字符返回。

2 个答案:

答案 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)