かつては何かの意味があったことは確かであり、その意味を汲み取りたいところではあるが、今日においてはその意味は希薄であり、意図を汲み取ったところで無用である可能性が高いと判断されるのであれば、それは切って捨てるのもやむなしということになるのだろう。
まあ、一旦切って問題があることが分かれば、また戻せば良いだけの話…かな?カジュアルにやっても多分咎められないと思いたい。
OpenBSD(uaa@), Ham(JG1UAA), Ingress(Lv14, RES), Japanese(Sagamihara-city, Kanagawa)
Another side: https://social.tchncs.de/@uaa
npub1rarr265r9f9j6ewp960hcm7cvz9zskc7l2ykwul57e7xa60r8css7uf890
Messages from this Mastodon account can read via mostr.pub with npub1j3un8843rpuk4rvwnd7plaknf2lce58yl6qmpkqrwt3tr5k60vfqxmlq0w
かつては何かの意味があったことは確かであり、その意味を汲み取りたいところではあるが、今日においてはその意味は希薄であり、意図を汲み取ったところで無用である可能性が高いと判断されるのであれば、それは切って捨てるのもやむなしということになるのだろう。
まあ、一旦切って問題があることが分かれば、また戻せば良いだけの話…かな?カジュアルにやっても多分咎められないと思いたい。
canuumのソース見てみたけど、自分の理解だとsj3みたいに文字コードの種別に応じ文字境界単位での出力を~といった感じの物は、見当たらない。おそらくprintf.cのflushw_buf()の処理になるんだろうけど、バッファの内容をputchar()でべーっと吐くだけ。
canuumもNEWS-OS対応していて、このコードでも動くというのなら…出力時における文字境界単位でなんかやる意味って本当に無いってことにならんか?(sj3の、オリジナル…コメントがちゃんと存在する状態のコードを見ない限りその意図は分からないってことでもある)。
putchar()で標準出力に吐くにしても、吐いた先で一旦バッファリングしてからwrite()なりなんなりするはずだと思うんだけど…
canuumとかのソースを見る?
あんまり難しく考えなくて良いのかなあ?「2byteで構成する!」なら2byte、「5byteで構成する!」なら5byteとりあえず拾って、その拾ったものが正しいかどうかを検証してグリフにするかエラーを吐くかを決める。変な気遣いはしない方向で。
https://gist.github.com/RobertAudi/9f1ce1d5ecc9c12ae5c4c6c086369c5c
3.3 Sequences with last continuation byte missing
All bytes of an incomplete sequence should be signalled as a single malformed sequence, i.e., you should see only a single replacement character in each of the next 10 tests. (Characters as in section 2)
って書いてあるけど、Firefox上での表示は"only a single placement character"にならないケースがあるな。
ISO 10646のAnnex Rってのはこれかな? https://www.cl.cam.ac.uk/~mgk25/ucs/ISO-10646-UTF-8.html
UCS Transformation Format 8 (UTF-8)
sj3のwrite_stdout()、3byte EUCの場合(SS3, 0x8f)…2byte目ないし3byte目がEUCの範囲を外れていてもとりあえずホールドしてる感じですね。これはSJ_read()に関しても同様。
SS3, CR, 'a'みたいなシーケンスになった場合、おそらくSS3を棄却、CRと'a'を表示というのが理想なんだろうけど、って不正なEUCを食らった場合の扱いというのもどうなってるんだろう…いやそもそも不正なEUCとは…
セキュリティを考えると、不正なエンコーディングに対しては頑なに受け付けないという作りにするしかない(MSB側の2bit分を無視するという実装は許されない)気がするけど。
UTF-8、複数バイトからなる場合の2nd octet以降のMSB側"10"が正しくなかった場合ってどう扱うんだろう。
とりあえず1st octetの規定に従ったoctet数だけは読みだして、まるっと棄却するとかそんな感じで良いのかな。
不正なエンコーディングに対する処置をどうするかっていうのがRFC 3629( https://tex2e.github.io/rfc-translater/html/rfc3629.html )を見てもよく分からなくって。