M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Unclazz.Commons.Jsonライブラリv1.2.1リリース

昨年11月に公開したJSONパーサー(かつシリアライザ) Unclazz.Commons.Jsonライブラリ のバージョン1.2.1をリリースしました。
このリリースでは以下の2つのバグフィックスを行っています:


余談 - サロゲートペア問題

ところで、目的はあくまでバグフィックスだったのですが、とくに2点目のUnicodeエスケープシーケンスのサポート追加はいくつかの点で勉強になりました:

  • UTF-16ではUnicodeの拡張領域に含まれる文字を表現するためサロゲートペアという4バイトを使用する(それ以外は2バイト)
  • JavaC#のようなやや旧世代の言語では文字列はUTF-16で表現されている
  • これらの言語における文字型(char)はその定義からしてサロゲートペアを扱うにはキャパシティが足りない(Javaでは概念として「文字」と「コードポイント」を分けており後者はサロゲートペアを含む)
  • これらの言語における文字列型(String)リテラルで拡張領域に含まれる文字をUnicodeエスケープシーケンスで表現する場合\uXXXX\uXXXX(XXXXは左ゼロ詰め4桁固定16進数値)という記法をとる
  • これは「あたかも2文字であるように記述する」とも読めるが実際上その長さ(JavaではString#lengthC#ではString#Length)をとると2文字分に該当する
  • 「(Python3の)文字列はUnicode文字のシーケンスだ」というとき含意されているのはこうしたUTF-16に依拠する実装をとる前世代に対する優位性である

参考にした記事:


2016年11月の記事:

m12i.hatenablog.com