「サロゲートペア」を含む日記 RSS

はてなキーワード: サロゲートペアとは

2018-12-24

UTF8ってunsigned charで良いんだっけ?問題

https://qiita.com/yumetodo/items/54e1a8230dbf513ea85b]

から出発したこの話。あちこち議論されているようですな。

https://b.hatena.ne.jp/entry/s/qiita.com/yumetodo/items/54e1a8230dbf513ea85b]

https://togetter.com/li/1301253]

https://naruse.hateblo.jp/entry/2018/12/24/013446]

文字コードを多少かじった人間としては、また人類文字コードで混乱している。と思っていて議論が深まるのかなと思ったりします。

ただ、この話、見ててもやもやする所が一つありまして、UTF-8の1コードポイント=uint8_t=unsigned charでええんかいな。という点です。

文字コードを少しでも知っている人はUTF-8は1つのコードポイントを可変長のバイト列で表します。

よく言われるようにASCIIは1バイト、大体のCJKV文字は3バイト以上で表します((久々にWikipediaUTF-8見たら、UTF-8サロゲートペアってあるんだねー。罪深いわOrale〜))。最大6バイトで1つのコードポイントを表します。

まりですね、char16_tとかchar32_tとかがUTF-16UTF-32マッピングされるのは分かるんですよ。サロゲートペアは脇に置いておいて、コードポイントを表すのにはこの型(っつーか、データ長)を使うよってのが分かるので。

サロゲートペアを考えたときのUTF16も同じ考え方になるんですけど、UTF-8みたいな可変長のバイト長を取るエンコード方式は、結局、1「文字」を表す型(データ長)が定まらないんですよ。

char8_tをunsigned charの子クラスにしたとしてもそれって、UTF-8にとっては「1文字を表す型」ではないんですよ。「1文字を表すバイト列の単位の1つ」でしかないんですよ。(サロゲートペア考慮したときchar16_tも同様)。

意味論で言っちゃえばUTF-32に対してchar8_tを使っても意味は同じになるんですよ。UTF-32って8ビット×4で構成されるだけなんで。

なので、UTF-8で表される1文字を型で使いたかったらuint64_tの子クラス(本当は最大6バイトなので48でいいんだけど)にしなきゃダメなんじゃねぇの?もしくは最少8ビットで48ビット保証する型。とC++界隈ではない自分は思うわけです。

つーか、可変長文字って示すフラグになる型を作った方がまだマシじゃないのと思うのです。

2018-04-20

新年号で出来る限りプログラマ嫌がらせする方法

1. BMP外の文字を使う

UTF-16ではサロゲートペアへの対応UTF-8では4バイト文字対応必要になる.

2. CJK互換漢字を使う

Unicode正規化で別の文字に変わるためその対応必要.

3. 文字数を変える

例えば3文字にしたり4文字にしたりしてみる.

2017-11-23

メタナントカ

例えば「AB」という概念があった時, 「ABAB」「ABのAB」「ABに関するAB」という概念も成立しうる場合, その概念は「メタAB」と呼べそうである.

あたりがぱっと思いつくけれど, 身近な例でも応用できないだろうか.

意外と難しい.

2014-11-05

Unicode 8.0ドラフト案出しなう

Unicode 8.0のドラフトみて面喰った。

もはや"「文字」コード"でもなんでもねー。

ただでさえ複雑怪奇なのにまたややこしいことを。

この調子だと「Unicode8.0は超面倒なので対応しません。色コード部分は豆腐になるけど仕様です」なんてソフトウェアも出てくるんじゃないかな。

最悪「絵文字肌色問題対応したいけど、Unicode8.0は超面倒なので絵文字豆腐します」なんてところも・・・

そんなベンダーはいないと思いたいけど、対応コストが高くつきそう・・・

それにしても、昔を思い出す。

昔:65536文字で足りる!任せろ → 文字よこせ(CJKなどアジア中心に) → 無理でした。サロゲートペアやります

今:絵文字入れたぜ! → 人種差別だコノヤロー → 色コードつけま

これからUnicodeにどのようなネタを仕込んでくれるのか、期待してますよ。

 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん