我知道這是一個老生常談的問題……我也查過很多答案……但是實在是搞不定……
我發現我專案內的有一段中文比較,具體如下
```
// Get concepts of the entity
var cndbpediaConceptPrefix = 'http://shuyantech.com/api/cnprobase/concept?q=';
var responseConcept = httpGet( cndbpediaConceptPrefix.concat(encodeURI(keyword)) );
responseConcept = JSON.parse(responseConcept);
var concepts = responseConcept.ret;
// concepts: [[concept1, weight1], [concept2, weight2], [concept3, weight3], ...]
var k;
for (k = 0; k < concepts.length; k++) {
//var compareRenwu = concepts[k][0].localeCompare('人物'); // 0 if equivalent
//var compareShengwu = concepts[k][0].localeCompare('生物'); // 0 if equivalent
alert(concepts[k][0] + ': ' + concepts[k][0].length);
if (concepts[k][0] === '人物' || concepts[k][0] === '生物' || concepts[k][0].includes('人物') || concepts[k][0].includes('生物')) {
//if (compareRenwu === 0 || compareShengwu === 0) {
alert('Match!');
namelist.push(names[j]);
break;
}
}
```
注意高亮的部分,在if外面那個地方的print結果是正常的(人物: 2)這樣。
但是下面的if條件怎么都通不過…………
順便,我已經注釋掉的那個版本的比較我也試過,也不行
---------------------------------------------------
補充:我測驗了一下把
var responseConcept = httpGet( cndbpediaConceptPrefix.concat(encodeURI(keyword)) );
換成
var responseConcept = '{"status": "ok", "ret": [["人物", 1299103], ["政治人物", 44688], ["政治家", 2578], ["君主", 1230], ["議員", 249], ["首相", 89]], "count": 6, "pagesize": 50}';
這個東西,就能進入if里面了,但是if上面的那個alert顯示出來的是亂碼。這個是因為httpGet出來的跟if條件內的'人物'中文編碼不同……嗎?
uj5u.com熱心網友回復:
我自己搞定了。解法是
encodeURIComponent(concepts[k][0]) === encodeURIComponent('人物')
這樣
uj5u.com熱心網友回復:
這樣看看console.log(concepts[k][0].charCodeAt(0),concepts[k][0].charCodeAt(1));
console.log('人物'.charCodeAt(0),'人物'.charCodeAt(1));
如果輸出的不一樣就不是同一字符,就是httpGet()回傳的字串編碼不同。
uj5u.com熱心網友回復:
首先建議concepts 里面用物件來表述 [{社會角色: '議員', 權重: 343}], 查一下后端是如何處理中文編碼的,前面和后面的編碼需要一致轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/86913.html
標籤:JavaScript
上一篇:web環境搭建
下一篇:淘寶的這個請求是發到哪?
