このアプローチに問題があることがわかりました。基本的には、出力をファイルに書き込もうとしていて、適切にエンコードされていなかったためです。JSはUCS-2エンコーディング(source、source)を使用しているようなので、このソリューションをさらに一歩伸ばす必要があります。これは私に役立つ私の拡張ソリューションです。
汎用テキストで問題はありませんでしたが、アラビア語または韓国語になっていると、出力ファイルにすべての文字が含まれず、エラー文字が表示されていました
ファイル出力:
","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}
元の:
","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}
私はデニスの解決策と私が見つけたこの投稿から情報を得ました。
これが私のコードです:
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;
}
これにより、エンコードの問題なしにコンテンツをファイルに保存できます。
仕組み:基本的に、UTF-8文字を構成する単一の8バイトのチャンクを取得して、それらを単一の文字として保存します(したがって、このようにして構築されたUTF-8文字は、これらの文字の1〜4個で構成できます)。UTF-8は、長さが1から4バイトまで変化するフォーマットで文字をエンコードします。ここでは、URIコンポーネントで文字列をエンコードし、このコンポーネントを取得して、対応する8バイト文字に変換しています。このようにして、1バイトを超える長さのUTF8文字によって提供される情報を失うことはありません。
Int8Array
ArrayBufferView
すると、ブラケット表記を使用して文字をコピーしstring[i] = buffer[i]
たり、その逆を行ったりすることができます。