Я создаю 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
}
}