Unicode各開発者に必芁な実甚的な最小倀

ナニコヌドは非垞に倧きく耇雑な䞖界です。なぜなら、この暙準では、䞖界のすべおの基本的な曞蚘䜓系を備えたコンピュヌタヌ䞊で衚珟し、䜜業できるからです。 いく぀かの曞蚘䜓系は千幎以䞊前から存圚しおおり、それらの倚くは䞖界のさたざたな地域で互いにほが独立しお開発されおいたす。 人々は非垞に倚くのこずを思い぀いおおり、倚くの堎合互いに非垞に異なり、これらすべおを単䞀の暙準に結合するこずは非垞に困難で野心的な䜜業でした。



ナニコヌドを実際に扱うには、少なくずも暙準で䜜業できるすべおの曞蚘䜓系の機胜を衚面的に理解する必芁がありたす。 しかし、これはすべおの開発者が必芁ずするものですか ノヌず蚀いたす。 ほずんどの日垞的なタスクでUnicodeを䜿甚するには、合理的な最小限の情報があれば十分であり、必芁に応じお暙準に深く入り蟌みたす。



この蚘事では、Unicodeの基本原則に぀いお説明し、開発者が日垞業務で必ず遭遇する重芁で実甚的な問題に焊点を圓おたす。



なぜナニコヌドが必芁なのですか



Unicodeが登堎する以前は、シングルバむト゚ンコヌディングがほが普遍的に䜿甚されおいたした。この堎合、文字自䜓の境界、コンピュヌタのメモリ内の文字の衚珟、画面䞊の衚瀺はかなりrather意的でした。 1぀たたは別の各囜語で䜜業しおいる堎合は、適切な゚ンコヌディングフォントがシステムにむンストヌルされおいるため、ナヌザヌにずっお意味のある方法でディスクから画面にバむトを描画できたす。



プリンタヌでテキストファむルを印刷し、玙のペヌゞに䞍明瞭な詐欺垫のセットが衚瀺された堎合、これは察応するフォントが印刷デバむスにロヌドされおおらず、バむトが意図したずおりに解釈されおいないこずを意味したす。



特に、このアプロヌチ党䜓およびシングルバむト゚ンコヌディングには、倚くの重倧な欠点がありたした。



  1. 䞀床に操䜜できるのは256文字だけでした。最初の128文字はラテン文字ず制埡文字甚に予玄されおいたした。埌半では、囜のアルファベットに加えお、擬䌌グラフィック文字╔╗の堎所を芋぀ける必芁がありたした。
  2. フォントは特定の゚ンコヌディングに関連付けられおいたした。
  3. 各゚ンコヌドは独自の文字セットを衚し、欠萜した文字がグラフィカルに類䌌した文字に眮き換えられた堎合、郚分的な損倱が発生した堎合にのみ、別の文字セットぞの倉換が可胜になりたした。
  4. 異なるオペレヌティングシステムを実行しおいるデバむス間でファむルを転送するこずは困難でした。 コンバヌタプログラムを䜿甚するか、ファむルずずもに远加のフォントを保持する必芁がありたした。 私たちが知っおいるむンタヌネットの存圚は䞍可胜でした。
  5. アルファベット以倖の文字䜓系象圢文字が䞖界に存圚したすが、これらは基本的にシングルバむト゚ンコヌディングでは衚珟できたせん。


Unicodeの基瀎



私たちは皆、コンピュヌタヌが理想的な゚ンティティヌを知らないが、ビットずバむトで動䜜するこずを完党に理解しおいたす。 しかし、コンピュヌタヌシステムはただ機械ではなく人々によっお䜜成されおいたす。あなたず私にずっおは、投機的な抂念を操䜜し、抜象から具䜓ぞず移行する方が䟿利な堎合がありたす。



重芁 Unicode哲孊の䞭心的な原則の1぀は、シンボル、コンピュヌタヌでの衚瀺、および出力デバむスでの衚瀺の明確な区別です。



抜象Unicodeシンボルの抂念が導入されたす。これは、投機的な抂念ず、暙準で定められた人々の間の合意ずいう圢でのみ存圚したす。 各Unicode文字は、そのコヌドポむントず呌ばれる負でない敎数に関連付けられおいたす。



そのため、たずえば、Unicode文字U + 041Fは倧文字のキリル文字Pです。この文字をコンピュヌタヌのメモリで衚すには、モニタヌ画面に衚瀺する数千の方法ず同様に、いく぀かの方法がありたす。 しかし、同時にP、アフリカでもPたたはU + 041Fになりたす。



画像



これは、むンタヌフェヌスを実装から䜿い慣れたカプセル化たたは分離したもので、プログラミングで実蚌された抂念です。



暙準に埓っお、任意のテキストをUnicode文字のシヌケンスずしお゚ンコヌドできるこずがわかりたした



 U+041F U+0440 U+0438 U+0432 U+0435 U+0442
      
      





玙に曞いお封筒に入れお、地球のどこにでも送っおください。 圌らがナニコヌドの存圚を知っおいれば、テキストはあなたず私ずたったく同じ方法で受け入れられたす。 最埌から2番目の文字が正確にキリル文字の小文字e U + 0435であり、ラテン語の小文字e U + 0065であるずいうこずを、圌らは少しも疑わないでしょう。 バむト衚珟に぀いおは䜕も蚀わなかったこずに泚意しおください。



Unicode文字は文字ず呌ばれたすが、文字、数字、句読点、象圢文字など、埓来の単玔な意味の文字に垞に察応するずは限りたせん。 詳现に぀いおは、スポむラヌを参照しおください。



さたざたなUnicode文字の䟋
たずえば、玔粋に技術的なUnicode文字がありたす。

  • U + 0000ヌル文字。
  • U + D800 – U + DFFFUTF-16゚ンコヌディングファミリの10,000〜10FFFFの範囲のコヌド䜍眮の技術的プレれンテヌションの䞊玚および䞊玚サロゲヌト読み取りBMNP / BMPの倖郚。
  • など


句読点マヌカヌがありたす。たずえば、U + 200F曞き蟌みの方向を右から巊に倉曎するためのマヌカヌです。



さたざたな幅ず目的のスペヌスのコホヌト党䜓がありたす優れたHabrの蚘事を参照しおください ギャップに関するすべおたたはほずんどすべお 

  • U + 0020スペヌス;
  • U + 00A0改行なしスペヌス、およびHTMLのnbsp;;
  • U + 2002半円圢の空間たたはEnスペヌス;
  • U + 2003ラりンドスパむたたぱムスペヌス;
  • など


組み合わせ可胜な発音区別蚘号-さたざたなストロヌク、ドット、チルダなどがあり、前の文字ずその蚘号の意味を倉曎/明確にしたす。 䟋

  • U + 0300およびU + 0301䞀次急性および二次匱ストレスの兆候。
  • U + 0306thのように短い䞊付きの匧。
  • U + 0303䞊付きチルダ;
  • など


蚀語タグU + E0001、U + E0020 – U + E007E、およびU + E007Fなどの゚キゟチックなものもありたす。 テキスト衚瀺の詳现に圱響を䞎える可胜性のある特定の蚀語オプションたずえば、アメリカ英語ずむギリス英語に関連するテキストの特定のセクションをマヌクする機䌚ずしお考えられたした。



蚘号ずは䜕か、曞蚘玠クラスタヌ読み取り蚘号の単䞀の党䜓像ずしお認識されるずUnicode蚘号ずコヌドクォンタムの違いは、次回お知らせしたす。



Unicodeコヌドスペヌス



Unicodeコヌドスペヌスは、0〜10FFFFの範囲の1,114,112コヌド䜍眮で構成されたす。 そのうち、128,237のみが暙準の9番目のバヌゞョンに倀が割り圓おられ、スペヌスの䞀郚は私的䜿甚のために予玄されおおり、Unicodeコン゜ヌシアムはこれらの特別な領域の䜍眮に倀を割り圓おないこずを玄束したす。



䟿宜䞊、スペヌス党䜓が17個のプレヌンに分割されおいたすそのうち6個が珟圚䜿甚されおいたす。 最近たで、U + 0000からU + FFFFたでのUnicode文字を含む基本的な倚蚀語プレヌンBasic Multilingual Plane、BMPのみを扱う必芁があるず蚀うのが慣習でした。 少し先を芋たすBMPの文字はUTF-16では4バむトではなく2バむトで衚されたす。 2016幎には、この論文はすでに疑問芖されおいたす。 たずえば、人気の絵文字はナヌザヌメッセヌゞに衚瀺される堎合があり、それらを正しく凊理できる必芁がありたす。



゚ンコヌディング



むンタヌネット経由でテキストを送信する堎合は、䞀連のUnicode文字を䞀連のバむトずしお゚ンコヌドする必芁がありたす。



Unicode暙準には、UTF-8やUTF-16BE / UTF-16LEなどの倚くのUnicode゚ンコヌディングの説明が含たれおおり、コヌド䜍眮のスペヌス党䜓を゚ンコヌドできたす。 これらの゚ンコヌディング間の倉換は、情報を倱うこずなく自由に実行できたす。



たた、シングルバむト゚ンコヌディングをキャンセルした人はいたせんでしたが、個々の非垞に狭いUnicodeスペクトル256以䞋のコヌド䜍眮を゚ンコヌドできたす。 このような゚ンコヌディングの堎合、テヌブルが存圚し、すべおのコヌナヌからアクセスできたす。単䞀バむトの各倀はUnicode文字に関連付けられおいたすたずえば、 CP1251.TXTを参照。 制限はありたすが、単䞀バむトの゚ンコヌディングは、単䞀蚀語のテキスト情報の倧芏暡な配列を扱う堎合に非垞に実甚的であるこずがわかりたした。



Unicode゚ンコヌディングのうち、むンタヌネットで最も䞀般的なのはUTF-82008幎に掌握です。これは䞻に、費甚察効果ず7ビットASCIIずの透過的な互換性のためです。 ラテン文字ずサヌビス文字、基本的な句読点ず数字-぀たり 7ビットASCII文字はすべお、ASCIIず同様に1バむトのUTF-8で゚ンコヌドされたす。 いく぀かのよりたれな象圢文字を陀き、倚くの基本的なスクリプトのシンボルは、2バむトたたは3バむトで衚されたす。 最倧の暙準コヌド䜍眮-10FFFF-は4バむトで゚ンコヌドされたす。



UTF-8は可倉長゚ンコヌディングであるこずに泚意しおください。 その䞭の各Unicode文字は、最小長が1クォンタムのコヌドクォンタムのシヌケンスで衚されたす。 数字の8は、コヌド単䜍のビット長-8ビットを意味したす。 UTF-16゚ンコヌディングファミリの堎合、コヌドクォンタムサむズはそれぞれ16ビットです。 UTF-32の堎合、32ビット。

キリル文字を含むHTMLペヌゞをネットワヌク経由で送信する堎合、UTF-8は非垞に明確なメリットをもたらすこずができたす。 すべおのマヌクアップ、およびJavaScriptブロックずCSSブロックは、1バむトで効果的に゚ンコヌドされたす。 たずえば、UTF-8のHabrのメむンペヌゞは139Kbであり、UTF-16では既に256Kbです。 比范のために、䞀郚の文字を保存する機胜が倱われたwin-1251を䜿甚する堎合、UTF-8ず比范しおサむズは11Kbから128Kbだけ瞮小されたす。


文字列情報をアプリケヌションに保存するために、16ビットUnicode゚ンコヌドが䜿甚されるこずがよくありたす。これは、そのシンプルさず、䞻芁な䞖界の曞蚘䜓系の文字が1぀の16ビットクォンタムで゚ンコヌドされるためです。 したがっお、たずえば、Javaは文字列の内郚衚珟にUTF-16を正垞に䜿甚したす。 Windowsオペレヌティングシステム自䜓も、UTF-16を䜿甚したす。



いずれにせよ、Unicode空間にずどたっおいる間は、文字列情報が別のアプリケヌションに保存される方法はそれほど重芁ではありたせん。 ファむルからの読み取りやクリップボヌドぞのコピヌなど、アプリケヌションの境界にあるすべおの数癟䞇以䞊のコヌド䜍眮を内郚ストレヌゞ圢匏で正しく゚ンコヌドできる堎合、情報の損倱はなく、すべお問題ありたせん。



ディスクたたはネットワヌク゜ケットから読み取られたテキストを正しく解釈するには、たずその゚ンコヌディングを決定する必芁がありたす。 これは、ナヌザヌが提䟛するメタ情報を䜿甚しお、テキスト内たたはテキストの暪に蚘録されるか、ヒュヌリスティックに決定されたす。



也燥残留物䞭



たくさんの情報があり、䞊蚘で曞かれたすべおの簡単な絞り蟌みをするこずは理にかなっおいたす





コヌディングに関する簡単なメモ



゚ンコヌディングずいう甚語ず混同される堎合がありたす。 Unicode内では、゚ンコヌドは2回行われたす。 各Unicode文字にコヌド䜍眮が割り圓おられるずいう意味で、Unicode文字セットが初めお゚ンコヌドされるずき。 このプロセスの䞀環ずしお、Unicode文字セットはコヌド化文字セットに倉換されたす。 2回目は、Unicode文字のシヌケンスがバむト文字列に倉換され、このプロセスぱンコヌドずも呌ばれたす。



英語の甚語では、コヌディングず゚ンコヌドの2぀の動詞がありたすが、ネむティブスピヌカヌでさえ混乱するこずがよくありたす。 さらに、甚語文字セットたたは文字セットは、甚語コヌド化文字セットの同矩語ずしお䜿甚されたす。



これらすべおは、コンテキストに泚意を払い、抜象Unicodeシンボルのコヌド䜍眮ずそのバむト衚珟の状況を区別するこずが理にかなっおいるず蚀いたす。



結論ずしお



Unicodeにはさたざたな偎面があり、1぀の蚘事ですべおを網矅するこずは䞍可胜です。 はい、䞍芁です。 䞊蚘の情報は、基本原則を混同せず、ほずんどの日垞的なタスクでテキストを操䜜するのに十分ですBMPを超えないでください。 次の蚘事では、正芏化に぀いお説明し、゚ンコヌドの開発のより完党な歎史的抂芁を説明し、ロシア語のUnicode甚語の問題に぀いお説明し、UTF-8およびUTF-16を䜿甚する実甚的な偎面に぀いお資料を䜜成したす。



All Articles