跳到主要内容

tauri http fetch 中文乱码

问题描述

使用tauri http.fetch请求股票接口https://qt.gtimg.cn/?q=时中文乱码,原因是接口返回数据是gbk编码.

解决

web页面中 fetch解决方式如下

import moment from 'moment';
export async function realTimeData(stockCode) {
return fetch(`https://qt.gtimg.cn/?q=${stockCode}`, {
method: 'GET',

})
.then((res) => res.arrayBuffer())
.then((res) => {
return new TextDecoder('gbk').decode(res);
})

.then((text) => {
console.log(text);

if (text != null && text != undefined && text.length > 0) {
let arr = text.split('~');
let stock_name = arr[1];
let stock_code = arr[2];
let close = arr[3];
let open = arr[5];
let high = arr[33];
let low = arr[34];
let volume = arr[36];
let amount = arr[37];
let turn = arr[38];
let date = arr[30].substring(0, 8);

let preClose = arr[4];

const kData = {
open: open,
close: close,
high: high,
low: low,
volume: volume,
amount: amount,
date: moment(date, 'YYYYMMDD').format('YYYY-MM-DD'),
preClose: preClose,
//换手率
turn: turn,
stockCode: stock_code,
stockName: stock_name,
};
// console.log(data)
// if(chart!=undefined&& chart!=null){
// chart.updateData({...data})
// }

// console.log(`股票名称:${stock_name};股票代码:${stock_code};当前价格:${rela_time_price}`)
return kData;
}
});
}

tauri中解决


import { http } from '@tauri-apps/api';
import { ResponseType } from '@tauri-apps/api/http';
import { invoke } from '@tauri-apps/api/tauri';
import moment from 'moment';

export async function realTimeData(stockCode) {
return http.fetch(`https://qt.gtimg.cn/?q=${stockCode}`, {
method: 'GET',
responseType:ResponseType.Binary
})
.then((res) => {
return new Uint8Array(res.data)
// return array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset)

} )
.then((res) => {
return new TextDecoder('gbk').decode(res);
})

.then((text) => {
console.log(text);

if (text != null && text != undefined && text.length > 0) {
let arr = text.split('~');
let stock_name = arr[1];
let stock_code = arr[2];
let close = arr[3];
let open = arr[5];
let high = arr[33];
let low = arr[34];
let volume = arr[36];
let amount = arr[37];
let turn = arr[38];
let date = arr[30].substring(0, 8);

let preClose = arr[4];

const kData = {
open: open,
close: close,
high: high,
low: low,
volume: volume,
amount: amount,
date: moment(date, 'YYYYMMDD').format('YYYY-MM-DD'),
preClose: preClose,
//换手率
turn: turn,
stockCode: stock_code,
stockName: stock_name,
};
// console.log(data)
// if(chart!=undefined&& chart!=null){
// chart.updateData({...data})
// }

// console.log(`股票名称:${stock_name};股票代码:${stock_code};当前价格:${rela_time_price}`)
return kData;
}
});
}

tauri中需要设置返回类型 为 responseType:ResponseType.Binary并状res.data转成Uint8Array,TextDecoder也可以接受Uint8Array,所以array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset) 不用加也可以.