JavaScriptで文字コードを取得・変換する方法

JavaScriptで文字のコードを取得したり、コードから文字を生成したりする方法はいくつか存在します。この記事では、4つの主要なメソッドを詳しく解説します。

charCodeAt() メソッドを使う

String.prototype.charCodeAt() メソッドは、指定された位置にある文字のUTF-16 コードを整数で返します。これは、0から65535の範囲の数値を返します。

const str = 'こんにちは';
const charCode = str.charCodeAt(0);
console.log(charCode); // 12371

このメソッドは、文字列内の特定の文字が何かを判断する場合に使うことができます。例えば、文字が大文字か小文字かを判断するのに使うことができます。

const isUpperCase = (char) => {
  const code = char.charCodeAt(0);
  return (code >= 65 && code <= 90);
}

console.log(isUpperCase('A')); // true
console.log(isUpperCase('a')); // false

codePointAt() メソッドを使う

String.prototype.codePointAt() メソッドは、指定された位置にある文字のUnicodeコードポイントを整数で返します。これは、0から1114111の範囲の数値を返します。

const str = 'こんにちは';
const codePoint = str.codePointAt(0);
console.log(codePoint); // 12371

codePointAt()は、サロゲートペア(例えば、絵文字)に対しても適切なコードポイントを返します。

const emoji = '😀';
const codePoint = emoji.codePointAt(0);
console.log(codePoint); // 128512

fromCharCode() メソッドを使う

与えられたUTF-16の文字コードから文字を取得する場合は、String.fromCharCode() メソッドを使用します。

const charCode = 12371;
const character = String.fromCharCode(charCode);
console.log(character); // 'こ'

複数の文字コードを渡すことで、文字列を一度に生成することも可能です。

const str = String.fromCharCode(72, 101, 108, 108, 111);
console.log(str); // 'Hello'

fromCodePoint() メソッドを使う

与えられたUnicodeのコードポイントから文字を取得する場合は、String.fromCodePoint() メソッドを使用します。

const codePoint = 12371;
const character = String.fromCodePoint(codePoint);
console.log(character); // 'こ'

fromCodePoint()は、サロゲートペアを適切に処理するので、絵文字の生成にも使えます。

const emoji = String.fromCodePoint(128512);
console.log(emoji); // '😀'

注意 charCodeAt() と codePointAt() の違い

charCodeAt() と codePointAt() の主な違いは、サロゲートペアの取り扱いです。charCodeAt() はUTF-16コードユニットを返すため、サロゲートペアの場合は正確なUnicodeコードポイントを取得できません。その場合は codePointAt() を使用することが推奨されます。

まとめ

この記事では、JavaScriptで文字と文字コードを相互に変換する方法を4つ紹介しました。これらのメソッドを使うことで、コードから文字を生成したり、文字からコードを取得したりすることが可能です。特に、サロゲートペアを正しく取り扱いたい場合は、codePointAt() と fromCodePoint() の使用が重要です。