Трудности, не связанные с последовательностями Unicode - PullRequest
0 голосов
/ 22 мая 2018

У меня есть несколько больших файлов JSON из источника, который я не контролирую, пытаясь очистить их в Notepad ++ перед использованием их в качестве входных данных для программы.

Файл содержит много последовательностей Unicode,о котором я, к сожалению, очень мало знаю.Это тип, использующий две или три последовательности для представления одного символа, например \ u00c3 \ u00a9 для é и \ u00e2 \ u0080 \ u0094 для тире (-).

Я провел всю ночь, прибегая к помощи Googleкак преобразовать их обратно в обычные символы, но, к сожалению, я не очень понимаю, с чем сталкивался.

В конце концов я понял, что, установив плагин HTML-тега, я могу использовать "Decode JS" наих, затем преобразуйте весь файл в ANSI, а затем представьте его как UTF-8, что устраняет проблему с большинством символов.

Но некоторые, например, em dash или Ç(\ u00c3 \ u0087), по-прежнему отказываются преобразовываться.

Может кто-нибудь указать мне, почему эти конкретные символы по-прежнему отображаются неправильно, и как я могу это исправить?Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

JSON был написан неправильно для начала.Строковые данные , вероятно, , записанные в базу данных, настроенную для хранения данных latin1, но записанную в кодировке UTF-8, затем считанные обратно как данные latin1.

Если вы используете библиотеку JSON для чтения вJSON, строки в данных должны быть закодированы как latin1, чтобы исправить ошибку, а затем декодированы как UTF-8, чтобы правильно ее интерпретировать.

Вот пример в Python 3:

#!coding:utf8
import json

raw = '"\u00c3\u00a9\u00e2\u0080\u0094\u00c3\u0087"' # Your é—Ç examples.
data = json.loads(raw)
print(data) # garbage
print(data.encode('latin1').decode('utf8')) # corrected

Вывод:

éâÃ
é—Ç
0 голосов
/ 22 мая 2018

Вы можете просто импортировать файлы в программу JavaScript, которая требует данные JSON, проанализировать файлы JSON и затем передать результат в метод decodeURIComponent.В следующем фрагменте кода у меня есть строка mini-JSON, которую я затем анализирую, но вы можете заменить значение переменной json своим файлом.

    var json = `{"data" : "\u0024 equals the Dollar sign"}`
    var res = JSON.parse(json)
    console.log(res)
    var result = decodeURIComponent(res["data"]);
console.log(result)

Однако я не могу распознать «тип» предоставленных вами последовательностей Юникода, например, escape-последовательность для тире em.Если бы вы могли предоставить больше информации в своем вопросе о типах escape-последовательностей Unicode в файлах, это будет оценено.

...