0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ユニコード文字列 ― J 言語入門

Last updated at Posted at 2020-11-21

*jconsole の Windows 版では REPL でユニコードを利用できません。*この記事は JQt / JAndroid の使用を前提にしています。

ユニコード

ユニコードは、世界中の全ての文字に番号 (コードポイント) を割り当てて、ロケールや OS に依存しない 一つの文字集合を定めたものです。

J では、文字列はユニコードを用いて表現されますが、3 種類のエンコーディングがサポートされています。一つのコードポイントを何バイトで表すかが異なります。

エンコーディング バイト / コードポイント
UTF-8 1-4 (可変長)
UTF-16 2 (サロゲートペア 1 : 4)
UTF-32 4

リテラル (UTF-8)

文字列リテラルの型は、literal です。

   datatype'abcde'
literal

文字列リテラルには、ASCII 範囲外の文字も含むことができます。文字は UTF-8 でエンコードされます 2

   #'あ'    NB. 'あ' は 3 バイト
3
   a. i. 'あ'
227 129 130
   '寿司🍣'
寿司🍣

文字列 (literal) の長さはバイト数で数えるので、「1 文字」の つもりでも 2 バイト以上の文字ならリストになります。

   $'a'     NB. 文字 (atom)

   $'あ'    NB. 文字列 (list)
3

literal は、正確には文字列ではなくバイト列を表すので、任意のバイナリデータを格納できます。そのため、値の範囲 (精度) に言及する場合は、byte と呼ぶことがあります。

UTF-16

u: (monad) を使うと、UTF-16 の文字列を生成できます。UTF-16 文字列の型は unicode です。

   NB. A(U+0041) あ(U+3042)
   a=: u:16b0041 16b3042
   a
A
   #a
2
   datatype a
unicode

一部の漢字や絵文字を表すには、サロゲートペアを使います。

   u:16bd842 16bdfb7    NB. U+20BB7
𠮷
   #u:16bd842 16bdfb7
2

UTF-32

u: (dyad) を使うと、UTF-32 へ変換することができます。型は unicode4 です。

   a=. 10 u: 16b0041 16b3042 16b20bb7
   a
Aあ𠮷
   #a
3
   datatype a
unicode4

コードポイント単位で文字を扱いたい場合に便利です。

相互変換

UTF-8, UTF-16, UTF-32 およびコードポイントの数値は、相互変換が可能です。変換には、前述の u: (dyad) を使います。

x u: y と書いたとき、x の値によって変換の種類が変わります。

x y 変換後
2 UTF-8 | UTF-16 | UTF-32 UTF-16
3 UTF-8 | UTF-16 | UTF-32 integer
4 integer [16b_10000, 16bffff] UTF-16
8 UTF-8 | UTF-16 | UTF-32 | integer [0, 16b10ffff] UTF-8
10 UTF-8 | UTF-16 | UTF-32 | integer [0, 16b10ffff] UTF-32

ちなみに、monad の u: y は、

  • y が数値のとき 4 u: y
  • それ以外の場合 2 u: y

と同じ変換になります。


[ 前 : 数学関数 ] [ 目次 ] [ 次 : シンボル ]

  1. 2 バイト整数で表しきれない文字は 2 つの整数のペアで表されます。

  2. ただし、jconsole では文字コードは OS に依存します。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?