JavaScriptで文字コードを推測する

encoding-japaneseを使って、文字コードを検出する方法を紹介します。

encoding-japaneseを読み込む

scriptタグで読み込む方法とrequire()で読み込む方法があります。

scriptタグで読み込む場合は次のタグをHTMLファイルに追加します。

<script src="encoding.min.js"></script>

require()で読み込む場合は、encoding-japaneseをインストールして、

npm install encoding-japanese

require()でencoding-japaneseを読み込みます。

const Encoding = require('encoding-japanese');

文字コードを検出する

detect()の引数にバイト配列を渡すと、文字コードを得られます。

const detected = Encoding.detect(bytes);

次の文字コードに対応しています。

  • ‘UTF32’ (detect only)
  • ‘UTF16’
  • ‘UTF16BE’
  • ‘UTF16LE’
  • ‘BINARY’ (detect only)
  • ‘ASCII’ (detect only)
  • ‘JIS’
  • ‘UTF8’
  • ‘EUCJP’
  • ‘SJIS’
  • ‘UNICODE’ (JavaScript Unicode Array)

サンプルコード

次のコードはバイト配列の文字コードを検出し、バイト配列を文字列に変換して出力するコードです。

const Encoding = require('encoding-japanese');

const euc = [0xA4, 0xB3, 0xA4, 0xEC, 0xA4, 0xCF, 0xA5, 0xC6, 0xA5, 0xB9, 0xA5, 0xC8, 0xA4, 0xC7, 0xA4, 0xB9, 0xA1, 0xA3];
const jis = [0x1B, 0x24, 0x42, 0x24, 0x33, 0x24, 0x6C, 0x24, 0x4F, 0x25, 0x46, 0x25, 0x39, 0x25, 0x48, 0x24, 0x47, 0x24, 0x39, 0x21, 0x23, 0x1B, 0x28, 0x42];
const sjis = [0x82, 0xB1, 0x82, 0xEA, 0x82, 0xCD, 0x83, 0x65, 0x83, 0x58, 0x83, 0x67, 0x82, 0xC5, 0x82, 0xB7, 0x81, 0x42];
const utf8 = [0xE3, 0x81, 0x93, 0xE3, 0x82, 0x8C, 0xE3, 0x81, 0xAF, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x81, 0xA7, 0xE3, 0x81, 0x99, 0xE3, 0x80, 0x82];

const print = (bytes) => {
  // 文字コードの検出
  const detected = Encoding.detect(bytes);
  console.log(`文字コードは「${detected}」です`);

  const text = Encoding.convert(bytes, {
    from: detected,
    to: 'UNICODE',
    type: 'string',
  });
  console.log(`文字列は「${text}」です`);
};
[euc, jis, sjis, utf8].forEach(bytes => print(bytes));

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください