J'ai trouvé que j'avais des problèmes avec cette approche, essentiellement parce que j'essayais d'écrire la sortie dans un fichier et qu'elle n'était pas encodée correctement. Étant donné que JS semble utiliser le codage UCS-2 ( source , source ), nous devons étendre cette solution un peu plus loin, voici ma solution améliorée qui fonctionne pour moi.
Je n'ai eu aucune difficulté avec le texte générique, mais lorsqu'il était en arabe ou en coréen, le fichier de sortie n'avait pas tous les caractères mais montrait à la place des caractères d'erreur
Sortie de fichier:
","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}
J'ai pris les informations de la solution de dennis et ce poste que j'ai trouvé.
Voici mon 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;
}
Cela me permet d'enregistrer le contenu dans un fichier sans problème d'encodage.
Comment cela fonctionne: Il prend essentiellement les morceaux de 8 octets simples composant un caractère UTF-8 et les enregistre en tant que caractères uniques (par conséquent, un caractère UTF-8 construit de cette manière peut être composé de 1 à 4 de ces caractères). UTF-8 code les caractères dans un format variant de 1 à 4 octets. Ce que nous faisons ici, c'est coder la piqûre dans un composant URI, puis prendre ce composant et le traduire dans le caractère 8 octets correspondant. De cette façon, nous ne perdons pas les informations fournies par les caractères UTF8 de plus d'un octet de long.
Int8Array
ArrayBufferView
il pourrait être possible d'utiliser simplement la notation des crochets pour copier les caractèresstring[i] = buffer[i]
et vice versa.