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));

nodistでnpmを最新版にバージョンアップするには

nodistでnpmを最新版にバージョンアップするには

最新版のNode.jsをインストール

nodist latest

現在のnodeのバージョンにあったnpmを使用する

nodist npm match

Google Homeに話をさせる

castv2-clientのインストール

castv2-clientをインストールします。

npm install castv2-client

Windowsの場合は、

npm install castv2-client --no-optional

google-tts-apiのインストール

google-tts-apiをインストールします。

npm install google-tts-api --save

Google Homeに話をさせるプログラム

Google Homeに話をさせるプログラムです。

環境に合わせて、変数ipの値を変更してください。

// Google-HomeのIPアドレス
const ip = '192.168.97.2';

次の変数を変更することで、話す言葉を変更できます。
Google TTS APIの制限により、変数textは最大200文字までです。

// 読み上げる文字列
const text = 'こんにちは';
// 言語
const lang = 'ja-JP';
// 読み上げ速度
const speed = 1;

以下、プログラムです。

const googleTTS = require('google-tts-api');
const Client = require('castv2-client').Client;
const DefaultMediaReceiver = require('castv2-client').DefaultMediaReceiver;

// 読み上げる文字列
const text = 'こんにちは';
// 言語
const lang = 'ja-JP';
// 読み上げ速度
const speed = 1;
// Google-HomeのIPアドレス
const ip = '192.168.97.2';

const get_TTS_URL = (text, lang, speed) => {
    return googleTTS(text, lang, speed).then(function (url) {
        return url;
    }).catch(function (err) {
        console.error(err.stack);
        return '';
    });
};

const say = (host, content) => {
    const client = new Client();
    client.connect(host, function () {
        client.launch(DefaultMediaReceiver, function (err, player) {
            if (err) {
                console.log(err);
                return;
            }

            player.on('status', function (status) {
                console.log(`status broadcast playerState=${status.playerState}`);
            });

            const media = {
                contentId: content,
                contentType: 'audio/mp3',
                streamType: 'BUFFERED'
            };
            player.load(media, { autoplay: true }, function (err, status) {
                client.close();
            });
        });
    });
    client.on('error', function (err) {
        console.log(`Error: ${err.message}`);
        client.close();
    });
};

async function main() {
    const url = await get_TTS_URL(text, lang, speed);
    if (url == '') return;
    say(ip, url);
}

main();

Ubuntuにnode.jsの最新版をインストールするには

node.jsのサイトにインストール方法が書かれています。

Node.js v9 を利用するには

curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs

Node.js v8 を利用するには

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs