lua cjson无法解码特定的unicode char?

时间:2016-09-04 15:00:03

标签: python unicode utf-8 lua torch

我在尝试解码特定的unicode char时从lua cjson收到以下错误,

root@9dc8433e6d83:~/torch-rnn# th train.lua -input_h5 data/aud.h5 -input_json data/aud.json -batch_size 50 -seq_length 100 -rnn_size 256 -max_epochs 50
Running with CUDA on GPU 0  
/root/torch/install/bin/luajit: train.lua:77: Expected value but found invalid unicode escape code at character 350873
stack traceback:
    [C]: in function 'read_json'
    train.lua:77: in main chunk
    [C]: in function 'dofile'
    /root/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
    [C]: at 0x00406670

通过关注源代码,我可以看到train.lua read_json正在使用cjson。

有问题的unicode转义码是\ uda85

如果我转到https://www.branah.com/unicode-converter,它会告诉我转义应解码的字符。

unicode转义是使用python unichr(55941)生成的,并通过重定向python脚本输出写入PYTHONIOENCODING = UTF-8的文件。

以下演示如何生成角色;

echo "print unichr(55941)" > test.py
python test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    print unichr(55941)
UnicodeEncodeError: 'ascii' codec can't encode character u'\uda85' in position 0: ordinal not in range(128)

# export PYTHONIOENCODING=UTF-8
# python test.py
���
# python test.py > tfile
# cat tfile
���
# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f=open("tfile",'r')
>>> s=f.readline()
>>> s
'\xed\xaa\x85\n'
>>> print s
���

>>> s.decode('utf-8')
u'\uda85\n'

我想要做的总体是在0-65535范围内使用一组整数并使用python将它们映射到UTF-8字符并将它们写入文件。然后我想使用使用LUA在火车序列上训练RNN的torch-rnn。我试图在火炬-tran python脚本/ preprocess.py生成的文件上运行train.lua时收到错误

1 个答案:

答案 0 :(得分:1)

似乎问题是unicode代理,理解这意味着我可以过滤/切换它们以获得不同的值。在这个用例中,这不是一个大问题。