Ho scoperto di avere problemi con questo approccio, fondamentalmente perché stavo cercando di scrivere l'output su un file e non era codificato correttamente. Poiché JS sembra utilizzare la codifica UCS-2 ( sorgente , sorgente ), dobbiamo estendere ulteriormente questa soluzione, ecco la mia soluzione migliorata che funziona per me.
Non ho avuto difficoltà con il testo generico, ma quando era arabo o coreano, il file di output non aveva tutti i caratteri ma mostrava invece caratteri di errore
Uscita file:
","10k unit":"",Follow:"Õ©íüY‹","Follow %{screen_name}":"%{screen_name}U“’Õ©íü",Tweet:"ĤüÈ","Tweet %{hashtag}":"%{hashtag} ’ĤüÈY‹","Tweet to %{name}":"%{name}U“xĤüÈY‹"},ko:{"%{followers_count} followers":"%{followers_count}…X \Ì","100K+":"100Ì tÁ","10k unit":"Ì è",Follow:"\°","Follow %{screen_name}":"%{screen_name} Ø \°X0",K:"œ",M:"1Ì",Tweet:"¸","Tweet %{hashtag}":"%{hashtag}
Originale:
","10k unit":"万",Follow:"フォローする","Follow %{screen_name}":"%{screen_name}さんをフォロー",Tweet:"ツイート","Tweet %{hashtag}":"%{hashtag} をツイートする","Tweet to %{name}":"%{name}さんへツイートする"},ko:{"%{followers_count} followers":"%{followers_count}명의 팔로워","100K+":"100만 이상","10k unit":"만 단위",Follow:"팔로우","Follow %{screen_name}":"%{screen_name} 님 팔로우하기",K:"천",M:"백만",Tweet:"트윗","Tweet %{hashtag}":"%{hashtag}
Ho preso le informazioni dalla soluzione di Dennis e ho trovato questo post .
Ecco il mio codice:
function encode_utf8(s) {
return unescape(encodeURIComponent(s));
}
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
function ab2str(buf) {
var s = String.fromCharCode.apply(null, new Uint8Array(buf));
return decode_utf8(decode_utf8(s))
}
function str2ab(str) {
var s = encode_utf8(str)
var buf = new ArrayBuffer(s.length);
var bufView = new Uint8Array(buf);
for (var i=0, strLen=s.length; i<strLen; i++) {
bufView[i] = s.charCodeAt(i);
}
return bufView;
}
Questo mi permette di salvare il contenuto in un file senza problemi di codifica.
Come funziona: Prende fondamentalmente i singoli blocchi di 8 byte che compongono un carattere UTF-8 e li salva come caratteri singoli (quindi un carattere UTF-8 costruito in questo modo, potrebbe essere composto da 1-4 di questi caratteri). UTF-8 codifica i caratteri in un formato che varia da 1 a 4 byte di lunghezza. Quello che facciamo qui è codificare la puntura in un componente URI e quindi prendere questo componente e tradurlo nel corrispondente carattere di 8 byte. In questo modo non perdiamo le informazioni fornite dai caratteri UTF8 di lunghezza superiore a 1 byte.
Int8Array
ArrayBufferView
potrebbe essere possibile utilizzare semplicemente la notazione delle parentesi per copiare i caratteristring[i] = buffer[i]
e viceversa.