NodeJs: когда начнете помещать арабский c в JSON, преобразуйтесь в сущности - PullRequest
0 голосов
/ 21 января 2020

Я создаю API на основе очистки веб-сайта, веб-сайт Араби c один и старый.

Я впервые столкнулся с проблемой, когда я делаю запрос к веб-сайту Html сервер возвращает весь арабский c текст в некоторых странных символах !!

И я решил это, используя библиотеку с именем iconv-lite по этому фрагменту кода

// decoding the response to support arabic
responseBody = iconv.decode(Buffer.from(responseBody), "win1256");

Теперь, если я вернусь, Html прекрасно работает , но когда я начинаю анализировать HTML, чтобы извлечь из него данные и вернуть его в формат JSON, проблема возвращается, араби c отображается как HTML сущностей.

Ответ примерно такой: !!! (текст в каждом поле JSON только по-арабски)

"                           بيانات الطالب الأساسية            ( دور مايو )"

Также, если я Stringify массив, проблема по какой-то причине решается! Теперь мне нужно исправить это, так как мне нужны данные в формате JSON

Весь код

import { Injectable } from '@nestjs/common';
import { load } from 'cheerio';
import { get } from 'request-promise';
import * as iconv from 'iconv-lite';



@Injectable()
export class FacultyService {
    async getStudentResultsBody(faculty: string = 'Ektsad', seatNumer: string = '240') {
        // search by seatnumber
        let responseBody = await get(`http://xxxx/xxxx/${faculty}/xxx.asp?x_level=2019-2018&xxx=LIKE&xxx=${seatNumer}`, {
            encoding: null,
        });

        // decoding the response to support arabic
        responseBody = iconv.decode(Buffer.from(responseBody), "win1256");

        // parsing the html
        let $ = load(responseBody);

        const stdCode = $('.aspmaker a').attr('href').replace(/[^0-9]/g, "");

        // request to student result page
        let studentResultsPage = await get(`http://xxx/xxx/${faculty}/xx.asp?xxx=${stdCode}`, { encoding: null });

        // decoding the response to support arabic
        studentResultsPage = iconv.decode(Buffer.from(studentResultsPage), "win1256");

        return studentResultsPage;
    }


    async sanatizeData() {
        let body = await this.getStudentResultsBody();

        let $ = load(body);

        let studentDetails: any = $("form > div > table:first-child tr td").map(function (this: any) {
            return $(this).html()
                .trim()
                .split('<br>')
                .map(html => html.replace(/<[^>]*>?/gm, '').trim().split(':'));
        }).get();


        return studentDetails; // getting an issue
    }
}

1 Ответ

0 голосов
/ 21 января 2020

Вы не должны беспокоиться о сущностях в выводе сериализации JSON. JSON предназначен только для машинного чтения.

Пользователи не склонны видеть версию JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...