2016-09-04 2 views
1

ich die folgende Fehlermeldung von lua cjson bekommen, wenn ein bestimmten Unicode-Zeichen zu entschlüsseln versucht,lua cjson kann kein spezifisches Unicode-Zeichen dekodieren?

[email protected]:~/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 

durch die Quelle folgenden, kann ich sehen, dass train.lua read_json wird unter der Decke mit cjson.

Der Unicode-Escape-Code in Frage \ uda85

Wenn ich https://www.branah.com/unicode-converter gehen es sagt mir den Charakter der Flucht entschlüsseln soll.

Das Unicode-Escape wurde mit Python Unichr (55941) generiert und in eine Datei mit PYTHONIOENCODING = UTF-8 über die Umleitung der Python-Skript-Ausgabe geschrieben.

Im Folgenden wird gezeigt, wie das Zeichen generiert wurde.

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' 

Was ich versuche, insgesamt zu tun ist, eine Reihe von ganzen Zahlen im Bereich nimmt 0-65535 und Python sie auf UTF-8 Zeichen mit Karte und schreibt sie in eine Datei aus. Dann würde ich gerne Fackel-rnn verwenden, die LUA verwendet, um eine RNN auf der Folge von Zeichen zu trainieren. Ich erhalte den Fehler beim Versuch, th train.lua auf den Dateien zu laufen, die durch die Fackel-rnn python scripts/preprocess.py

+1

'\ uda85' ist der erste Code des Ersatzpaars, es muss ein zweiter Code (dc00-dfff) folgen, der dem ersten Code folgt, um das Unicode-Zeichen zu vervollständigen. Der erste Teil ohne den zweiten ist ein Fehler. –

+0

Ah interessant, danke. Kennen Sie eine Liste mit allen Ersatzpaaren? In dieser Anwendung kann ich sie einfach ohne Probleme auf einen anderen Wert umschalten, so dass ich eine Überprüfung für sie fest codieren kann. - auch, nur aus Interesse, wie ist die Dekodierungsstelle, die ich verlinkte, um ein gültiges Zeichen zu erzeugen, wenn ich es nur decode gebe? –

+0

@MattWarren Führender oder "hoher Surrogat" Bereich ist D800-DBFF, und nachfolgende oder "niedrige Surrogate" Bereich ist DC00-DFFF. Siehe https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates – Leon

Antwort

0

erzeugt werden. Es scheint, das Problem war Unicode-Surrogate, Verständnis bedeutet, dass ich sie filtern/wechseln kann für verschiedene Werte. In diesem Anwendungsfall ist das kein so großes Problem.

Verwandte Themen