#author("2023-12-06T09:50:06+09:00","default:irrp","irrp") →文字コード関連 #contents *一般 [#qcefa080] -[[あなたの知らない(かもしれない)文字コードの世界 TypeScript版😊👍🏿パ👨‍👩‍👦🇦🇿🏴󠁧󠁢󠁥󠁮󠁧󠁿>https://zenn.dev/aldagram_tech/articles/79d35b2779e326]] 2023.12 -[[文字コードの罠 - デザインワン・ジャパン Tech Blog>https://tech.designone.jp/entry/2023/08/30/115448]] 2023.8 --パピコ問題 -[[文字列の表記揺れをUnicode正規化で簡単に解決する方法 - Qiita>https://qiita.com/y-ken/items/d08eb7f66c8fb2fa7d21]] 2023.9 -[[人間にUnicode正規化は難しい - エムスリーテックブログ>https://www.m3tech.blog/entry/2023/03/23/173000]] 2023.3 -[[JavaScript における文字コードの初歩 - 30歳からのプログラミング>https://numb86-tech.hatenablog.com/entry/2022/10/23/190637]] 2022.10 -[[Unicode Utilities: Confusables>https://util.unicode.org/UnicodeJsps/confusables.jsp?a=%E7%8E%8B%E6%A7%98%E3%83%8E%E8%80%B3%E3%81%AF%E3%83%AD%E3%83%90%E3%81%AE%E8%80%B3ABC]] 2022.8 -[[Unicodeで半角全角を扱う Ambiguous(曖昧さ)とUncertainty(不確実性)の恐怖>https://qiita.com/Nuits/items/71a69cf32d547c9875bb]] 2020.8 -[[文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!>https://employment.en-japan.com/engineerhub/entry/2020/04/28/103000]] 2020.4 -[[Unicodeの基礎知識とJavaでの扱い>http://gpsoft.dip.jp/hiki/?Unicode%A4%CE%B4%F0%C1%C3%C3%CE%BC%B1%A4%C8Java%A4%C7%A4%CE%B0%B7%A4%A4]] -[[戸籍統一文字とUnicode>http://www.taishukan.co.jp/kokugo/webkoku/series003_10.html]] 2012.10.12 -[[それUnicodeで>http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html]] -[[Unicodeは文字集合かエンコードか>http://blog.livedoor.jp/dankogai/archives/50696661.html]] 2006.11.24 *文字コード表 [#gc189a9a] -[[Unicode(ユニコード)とURLエンコード検索と変換サイト 0g0.org>https://0g0.org/]] 2022.9 -http://ash.jp/code/ -[[Unicode Character Category helper:http://www.codeproject.com/useritems/UnicodeCharCatHelper.asp]] *「〜」のUnicde->ShiftJIS変換問題 [#j0806fa5] -Windows環境でSJIS<-->Unicode間のコード変換を往復すると「〜」がヘンなのに変換される問題。 -http://blog.livedoor.jp/dankogai/archives/50488765.html -[[Unicode とユーザ定義文字・ベンダ定義文字に関する問題点と解決策:http://www.opengroup.or.jp/jvc/cde/ucs-conv.html]] -@ITでの関連記事 --http://www.atmarkit.co.jp/fjava/rensai3/mojibake02/mojibake02.html --http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.html -同様の問題を起こすコードの一覧表 --http://www.ingrid.org/java/i18n/unicode.html *Unicodeにしかない文字 [#n383ed4b] -Shift-JISには定義されておらず、Unicodeにしかない文字(通貨記号など)もフォントとしては表示できる -HTML上では &#xxxxx; のような数値文字参照になっていることがある。 -[[Java 17で文字を数える - CLOVER🍀>https://kazuhira-r.hatenablog.com/entry/2022/09/28/020028]] 2022.9 -[[Python3で数値文字参照をUNICODE文字に変換する方法>https://weblabo.oscasierra.net/python/python3-unescape-numeric-character-reference.html]] 2022.9 print(html.unescape("吴 ほげほげ")) -[[文字参照とは - 意味をわかりやすく - IT用語辞典 e-Words>https://e-words.jp/w/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7.html]] 2020 -数値文字参照 (numeric character reference) --表記したい文字を、Unicode/ISO 10646の文字番号(コードポイント)で表す方式で、十進数を用いる場合は「&#番号;」、16進数を用いる場合は「&#x番号;」のように表記する。 --HTMLでは「数値文字参照」(numeric character reference)、XMLでは「文字参照」(character reference)という。 -[[PythonでUnicodeコードポイントと文字を相互変換(chr, ord, \x, \u, \U) | note.nkmk.me>https://note.nkmk.me/python-chr-ord-unicode-code-point/]] 2019 --PythonでUnicodeコードポイント(文字コード)と文字を相互に変換するには組み込み関数chr(), ord()を使う。 --あるUnicodeコードポイントの文字を取得するにはchr()、ある文字のUnicodeコードポイントを取得するにはord()を使う。 -[[コード一覧:http://homepage2.nifty.com/Gat_Tin/unickigo.htm]] *UCS-2/UCS-4 [#yc983abd] Unicode(ユニコード)は、ユニコード・コンソーシアムによって制定された文字コードである。文字を2バイト、または4バイトで表し、世界中の文字を表現しようとするもの。Unicodeは、ISO 10646の中で、UCS-2(BMP)として採用されている -UCSは、Universal multiple-octet coded Character Setの略 -UCSには、2バイト(オクテット)で表すUCS-2と、4バイトで表すUCS-4がある。 -UCS-4では、4バイトを群(Group)、面(Plane)、区(Row)、点(Cell)で表すが、ほとんど使われていない。 -UCS-4の0群0面を基本多言語面(''BMP'':Basic Multilingual Plane)と呼ぶ。 -UCS-2は、BMPの上位の2バイトを省略した文字コードのこと Unicode(UCS-2)では、A,I,O,Rの4つの領域に分かれる。 日本語のJIS X 0208およびJIS X 0212は、CJK統合漢字として格納されている。 CJK統合漢字とは、中国(China)、日本(Japan)、韓国(Korea)の似ている漢字を同じ文字コードに割り当てたもの。 |領域名|文字コード|内容|h |A領域|00-4D|Alphabet領域のことで、アルファベットなどの表意文字を格納する領域 | |I領域 |4E-9F|Ideograph領域のことで、CJK統合漢字などの表意文字を格納する領域 | |O領域 |A0-DF|Open領域のことで、将来の拡張ための予備領域 0xD7-0xDFは、サロゲート領域で、UCS-4の1面から16面の拡張用| |R領域 |E0-FF|Restricted領域のことで、PUAなどの限定使用領域。PUAとは、Private Use Areaの略で、外字などを格納する領域のこと| JavaやXMLは、基本コードとしてUnicodeを採用。今後世の中では、Unicode化が進んでいく予定。 *UTF-8の変換規則 [#mbfe5cc0] |変換後パターン|変換前|変換後|h |1バイトになる場合|0000 0000 0aaa bbbb|0aaa bbbb| |2バイトになる場合|0000 0aaa bbbb cccc|110a aabb 10bb cccc | |3バイトになる場合|aaaa bbbb cccc dddd|1110 aaaa 10bb bbcc 10cc dddd| *BOM [#pcab8799] -''Byte Order Mark''の略で、Unicodeファイルのエンコーディング(UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE) を識別するために使われるマーカー(識別子)。 -Windows環境では、UTF-8、UTF-16LE, 16BE, 32LE, 32BEのいずれもBOM有が標準。 -BOMなしのUTF-8のことを''UTF-8n''と呼ぶ場合もある。 -ソフトウェアによっては、BOMを別の名称で呼ぶことがある。 --Unicodeサイン(EmEditorでの呼称) --UTF-8 シグニチャ(Visual Studio .NETでの呼称) -BOMの具体例 |エンコーディング|BOM|h |UTF-8|EF BB BF| |UTF-16LE|FF FE| |UTF-16BE|FE FF| *サロゲート [#g803d06c] -[[サロゲートペア入門>http://codezine.jp/a/article/aid/1592.aspx]] -UTF-16 では、UCS-4 の BMP 以外の文字を参照するために、文字二つ分をペアとして使うことがある。 -Shift_JIS などと違って、それ自体は無意味な文字同士を組み合わせる。(「ヘン」と「つくり」の考え方に似ている) -組み合わせの前半に使われる文字は前半にだけ、後半に使われる文字は後半にだけ使われるので別の文字と誤認されることはない -この、別の文字を表現するために定義されている、それ自体意味を持たない文字を「サロゲート」と呼ぶ。 -UCS-4 では、55296〜57343 の文字が「サロゲート」として定義されてる。これによって 1024 × 1024 = 1056768 の文字が表現できることになる。