我正在开发一个react-native应用程序,并且在渲染大多数从API返回的阿拉伯文本时,我遇到了一个问题,大部分文本看起来像垃圾(请检查屏幕截图1)
几次,它都能正确渲染(请检查屏幕截图2)
我检查了API响应,它始终正确返回文本。
仅供参考,我正在使用axios来获取数据。
这是我的axios代码:
const headers = {
"Content-Type": "application/json",
Accept: "application/json"
};
const requestBody = {
msgUID: getMsgUID(),
uid: this.props.user.uid
};
axios
.post(Config.FETCH_VISITS_URL, requestBody, { headers: headers })
.then(response => response.data)
.then(response => {
console.log(JSON.stringify(response));
this.setState({
loading: false,
arrayOfVisits: response.visits
});
})
.catch(error => {
console.log(
"Error getting documnets",
error + " msgUID " + requestBody.msgUID
);
});
这是API响应:
{
"msgUID": "654894984984",
"responseTime": 1567253177771,
"size": 4,
"visits": [{
"visitExitTimestamp": "",
"changeHistory": [],
"entryType": {
"vehicleDetails": {},
"by": ""
},
"createdBy": "fz085jMMedPApY0tp9L1e7iqyfO2",
"visitEntryTimestamp": "",
"visitStatus": "new",
"visitTypeObject": {
"lastName": "السيد",
"durationAmount": "30",
"firstName": "علي",
"phoneNumber": "(123) 456 - 7890",
"notes": "Test",
"durationType": "days",
"type": "person"
},
"timestampFrom": "2019-08-28T16:56:00.000Z",
"isDeleted": false,
"key": "oTAJ8WbVh54tVaemVoz6",
"createTime": "2019-08-27T16:56:45.286Z",
"checkInTime": "",
"checkOutTime": ""
},
{
"visitExitTimestamp": "",
"changeHistory": [],
"entryType": {
"vehicleDetails": {},
"by": ""
},
"createdBy": "fz085jMMedPApY0tp9L1e7iqyfO2",
"visitEntryTimestamp": "",
"visitStatus": "new",
"visitTypeObject": {
"lastName": "",
"durationAmount": "30",
"firstName": "محمد",
"phoneNumber": "(123) 456 - 7890",
"notes": "Test",
"durationType": "days",
"type": "person"
},
"timestampFrom": "2019-08-28T16:46:00.000Z",
"isDeleted": false,
"key": "oTAJ8WbVh54tVaemVoz6",
"createTime": "2019-08-27T16:46:45.286Z",
"checkInTime": "",
"checkOutTime": ""
}
],
"status": 200,
"statusString": "OK"
}
下面您可以找到我正在使用的render方法:
renderVisitorName(firstName,lastName) {
return (
<Text style={styles.name}>
{firstName + " " + lastName}
</Text>
);
}
我仅在Android上对此进行测试。
答案 0 :(得分:1)
我猜想一个UTF处理问题。 请检查以下线程,也许您遇到相同的问题:
答案 1 :(得分:1)
似乎您有字符编码问题。您可以使用软件包utf8
解决您的问题。当您使用utf8文本时,它将对您有很大帮助。该错误仅是因为您的字体不支持阿拉伯语,因此它返回了奇怪的字符。
首先,将utf8
软件包安装为项目中的
npm i --save utf8
另一件事是,如果您在react native中使用自定义font-face
,请确保所使用的语言支持您的字体。您也可以使用字体的组合。诸如
•中文
•希伯来语
•印地语
•日文
•韩语
但是,您仍然可以通过使用自定义字体并将编码编码为utf8来解决此问题。您可以找到阿拉伯字体Here。从您的本机样式表中将其设置为font-family
,然后尝试一下。
答案 2 :(得分:1)
接受的答案对我来说还不清楚。但是我找到了出问题的地方。
因此,无论将文本保存到数据库还是发送到服务器的任何位置,都只需在使用utf8
发送文本之前进行编码:
首先安装utf8
:
yarn add utf8
或npm i --save utf8
然后像这样编码
import utf8 from 'utf8';
...
utf8.encode(mytext);
没有必要decode
,fonts
也没有问题(至少在我的情况下)。
只需再次渲染文本,它就可以工作。