LoginSignup
14
8

More than 1 year has passed since last update.

UTF-8文字列を1文字単位に分割

Posted at

tl;dr

split('') ではUTF-8の4バイト文字を分割できません。
すべての文字を分割するには spred operetor 等を使用します。

split('')を使用した場合

console.log('3バイト文字は分割できる'.split(''));

// output: [ '3', 'バ', 'イ', 'ト', '文', '字', 'は', '分', '割', 'で', 'き', 'る' ]

console.log('4バイト文字(𠀋)の場合'.split(''));

// output: [ '4',  'バ', 'イ', 'ト', '文', '字', '(', '�',  '�',  ')', 'の', '場', '合' ]

4バイト文字である 𠀋 が正しく分割されていません。

正しい方法

spread operator を使う

console.log([...'4バイト文字(𠀋)の場合']);

// output: [ '4',  'バ', 'イ',  'ト', '文', '字',  '(', '𠀋', ')',  'の', '場', '合' ]

Array.from を使う

console.log(Array.from('4バイト文字(𠀋)の場合'));

// output: [ '4',  'バ', 'イ',  'ト', '文', '字',  '(', '𠀋', ')',  'の', '場', '合' ]

RegExpのuフラグを使う

console.log('4バイト文字(𠀋)の場合'.split(/(?=[\s\S])/u));

// output: [ '4',  'バ', 'イ',  'ト', '文', '字',  '(', '𠀋', ')',  'の', '場', '合' ]
14
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8