質問: ENCODING.codeToString(sjisArray); console.log("unicodeStr: " + unicodeStr); console.log("utf8Str: " + utf8Str); console.log("sjisStr: " + sjisStr); return sjisStr; }; console.log(encodeTo("あいうえお")); ``` ``` $ node test.js unicodeArray: UNICODE utf8Array: UTF8 sjisArray: SJIS unicodeStr: あいうえお utf8Str: ã��ã��ã��ã��ã�� sjisStr: � �¢�¤�¦� ̈ � �¢�¤�¦� ̈ ```
回答: ご質問の方法で、変換できているのではないでしょうか。 (HTTP応答はしたことがありませんが、テキストファイルの文字コード変換は試したことがあります) NodeJS では 文字コード変換後のバイト配列(Buffer や ArrayBufferでも可)を **再度、文字列(string)として扱おうとすると、バイト配列が破壊された文字列になりました**(NodeJS v6 時代)。 このため、変換の成否確認はバイト配列で行い、バイナリ保存した経験があります。 **HTTP応答の直前に変換**する方向で確認されてはどうでしょうか。 1. HTMLなどのソース内でcharsetを指定すべき箇所は Shift_JIS に変換する(string) 2. 応答直前に文字コード変換し、バイト配列を作成。 3. Content-Length 用に バイト配列長を取得 4. Content-Type に `; charset=Shift_JIS` を付与。 5. バイト配列を(ストリームなどで)HTTP応答 utf8 => Shift_JIS の文字コード変換: 1. utf8など から Unicode の **コードポイント** を取得 2. 対応する JIS X 0213 文字集合の **面、区、点**の各番号(Unicodeにおけるコードポイントに相当)を取得 3. 面区点番号を符号化表現(エンコーディング)のバイト配列にする 参考 : * JIS X 0213 EUC-JISX0213 / ISO-2022-JP-3 / Shift_JISX0213 * JIS X 0221-1 Unicode(utf8など)