しょぼいマシンで自作プログラミング言語を作ってみる (19)
UTF-32での字句解析にあたって(2)
UTF-8、UTF-16、UTF-32文字列データをストリームで読み書き
UTF16用読み込みストリーム(Utf16InputStream)、UTF32用読み込みストリーム(Utf32InputStream)でUTF-16、UTF-32の文字列を読み込むことにも成功しました。
更にはUTF-8、UTF-16、UTF-32文字列を書き込むストリーム、ByteArrayOutputStream、Utf16OutputStream、Utf32OutputStreamも用意できました。
それぞれの出力ストリームは以下の機能を提供しています・
write()。UTF32の文字コードを渡して、それぞれの形式に合わせたデータをストリームに書き込み。
writeString()。UTF-8文字列を渡して、それぞれの形式に合わせたデータをストリームに書き込み。
UTF-16、UTF-32においてはコンストラクタでビッグエンディアンからビッグエンディアン、ビッグエンディアンからリトルエンディアン、リトルエンディアンからビッグエンディアン、リトルエンディアンからリトルエンディアンへの変換を指定できます。
続・UTF-8、UTF-16、UTF-32の相互変換
文字列単位でのUTF-8、UTF-16、UTF-32の文字列データの相互変換はそれぞれの入力ストリーム、出力ストリームを活用して行なっています。
それぞれの相互変換にあたって、不正な文字コードを検知した場合はUnicode置換文字(U+fffd)に置換するようにしました。
とりあえず、今回の記事はここまで。これで字句解析の準備ができたはずです。次回はUTF-32での字句解析をするにあたって、寄り道をする前までのコードとの相違点について触れることになるかと思います。