Ich stellte fest, dass ich Probleme mit diesem Ansatz hatte, hauptsächlich weil ich versuchte, die Ausgabe in eine Datei zu schreiben, und sie nicht richtig codiert war. Da JS anscheinend UCS-2-Codierung ( Quelle , Quelle ) verwendet, müssen wir diese Lösung noch einen Schritt weiter ausdehnen. Hier ist meine erweiterte Lösung, die für mich funktioniert.
Ich hatte keine Schwierigkeiten mit generischem Text, aber wenn es sich um Arabisch oder Koreanisch handelte, enthielt die Ausgabedatei nicht alle Zeichen, sondern zeigte stattdessen Fehlerzeichen
Dateiausgabe:
","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}
Original:
","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}
Ich habe die Informationen aus Dennis 'Lösung genommen und diesen Beitrag gefunden.
Hier ist mein Code:
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;
}
Dadurch kann ich den Inhalt ohne Codierungsprobleme in einer Datei speichern.
So funktioniert es: Grundsätzlich werden die einzelnen 8-Byte-Blöcke, aus denen ein UTF-8-Zeichen besteht, als einzelne Zeichen gespeichert (daher kann ein auf diese Weise erstelltes UTF-8-Zeichen aus 1 bis 4 dieser Zeichen bestehen). UTF-8 codiert Zeichen in einem Format mit einer Länge von 1 bis 4 Byte. Was wir hier tun, ist, den Stich in einer URI-Komponente zu codieren und dann diese Komponente zu nehmen und sie in das entsprechende 8-Byte-Zeichen zu übersetzen. Auf diese Weise verlieren wir nicht die Informationen von UTF8-Zeichen, die länger als 1 Byte sind.
Int8Array
ArrayBufferView
es möglicherweise möglich, einfach die Klammernotation zum Kopieren von Zeichen zu verwendenstring[i] = buffer[i]
und umgekehrt.