タグ

unicodeに関するa-hamahamaのブックマーク (20)

  • UCS-2とUTF-8

    最終更新 2003-11-11 UCSとUTF ユニコードで文書を作るとき,文字コードの方式が2種類,あるいはそれ以上あることに気が付かれるかもしれません。例えば,一つはUnicodeとあるのに対し,もう一つはUnicode (UTF-8)と表記されているかもしれません。この2つは,また,その違いは何でしょうか(前者はUTF-16の一形態なのですが…)。 UCS-2とUCS-4 ユニコードが採択されることになった多言語用の文字コードセット,ISO-10846-1は,16ビット(16桁の二進数)でそれぞれの文字を表します。それをUCS-2 (Universal Character Set coded in 2 octets,「2つのオクテットでコードされたユニバーサル文字セット」)と称します。オクテットとは文字長の単位としての8ビット(8桁の二進数)のことです。 ユニコードの特定の文字は,例

  • 全ての開発者が知っておくべきUnicodeについての最低限の知識

    2003年には「プレーンテキストなんてものは全く存在しない」と言われ、テキストの解読には文字コードの情報が必須となっていました。しかし、2023年になるまでの20年の間に絵文字などのおかげでUnicodeの利用率は98%へと到達し、再び文字コードを気にせずにすむ時代がやってきています。そんな時代において、正しくUnicodeを使うために必要な知識をエンジニアのニキータ・プロコポフさんが解説しています。 The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!) @ tonsky.me https://tonsky.me/blog/unicode/ Unicodeの歴史と利用率の推移をまとめたグラフは下図の通り。2000年代後半から急速に普及が進んでいったこ

    全ての開発者が知っておくべきUnicodeについての最低限の知識
  • 標準出力にユニコードを出力させる - わびさびサンプルソース

    Windowsでコンソールアプリケーションを作成した際に、wprintfやwcoutでユニコードを表示させても標準出力に何も表示されません。 表示させるようにする為には、setlocale()関数に"LC_CTYPE", ""を指定して呼び出すと、ユニコードの日語の文字列も標準出力に表示されるようになります。(Visual Studio 2008) #include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { /* ロケールを日に設定 これを設定するだけで、標準出力に日語が表示される ようになります。 */ setlocale( LC_ALL, "Japanese" );

    標準出力にユニコードを出力させる - わびさびサンプルソース
  • Unicodeとは? その歴史と進化、開発者向け基礎知識

    まず、Unicodeで規定されている文字1つ1つには、最大で21bits(16進数で5~6桁)の数値が割り振られている。この数値をコードポイント(code point: 符号点、符号位置)という。 ちなみに、Unicodeでは、コードポイントの数値で文字を表すための表記として、「U+16進数」という書き方を使う。例えば、「a」であればU+61、「あ」であればU+3042と表記する(以下、文字コードは全て16進数で表記する)。 一方で、この21bitsのコードポイントがそのままテキストファイルに保存されるわけではない。一定のルールでバイト列に符号化することになる。詳細については、後々、Unicodeの歴史を追いつつ説明していくが、おおむね以下の3つを押さえておけばいいだろう(加えてコードポイントがビッグエンディアンで格納されるか、リトルエンディアンで格納されるかも重要になる。が、今回と次回は

  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - c

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
  • 文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!|ハイクラス転職・求人情報サイト AMBI(アンビ)

    文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう! 文字コードには、どのような種類があり、それぞれどのような意味を持つのか、といった、文字コードの基的な概念、従来の文字コードを紹介し、現在のUnicodeの構成を概説し、プログラミングにおいて注意すべき箇所をいくつか取り上げます。 ソフトウェア開発に携わる方の多くは、何らかの形で文字コードに触れることがあるでしょう。文字や記号をコンピュータ上でデータとして扱うには、文字コードの知識が必要不可欠です。 稿では、書籍『プログラマのための文字コード技術入門』の著者である矢野啓介さんが、知っておきたい基礎知識を分かりやすく解説します。 文字コードとは? Unicode以前の文字コード Unicodeとその主な符号化形式 UTF-16 UTF-32 UTF-8 Webで文字コードを指定する仕組み

    文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • Loading...

  • Javaの文字列の長さを判定するには - $shibayu36->blog;

    自分の頭を整理するために書いておく。正しいかは知らない。 まず前提として、Javaの内部表現としての「文字」は16ビット長のUTF-16ということがある。そうすると、普通に長さを取得すると、UTF-16のサロゲートペアで表される文字は2文字と扱われる。 また、文字には合成済み文字という話がある。「か」の後に濁点を結合することで、「が」を表現するみたいなやつ。 これらから、どこまで考慮して文字列の長さを取得するかでやり方が違う。 UTF-16のサロゲートペアを考慮しない UTF-16のサロゲートペアを考慮する 合成済み文字を考慮する 以下試したサンプルコード。 import java.text.BreakIterator; public class UnicodeCharSample { public static void main(String[] args) { // 𪛀あが St

    Javaの文字列の長さを判定するには - $shibayu36->blog;
  • Unicode のサロゲートペアとは何か - ひだまりソケットは壊れない

    こないだ同僚に Unicode のサロゲートペアについて説明する機会があって、それで Unicode の話をブログ記事に書きたくなったのでサロゲートペアについて書いておこうと思う。 この記事は Unicode Standard version 6.3.0 を見ながら書いた。 文字とコードポイント 抽象文字 (abstract character) を計算機上で扱うためには、符号化する必要がある。 Unicode では、文字の符号化のために使用できる整数の範囲を コード空間 (Codespace; 符号空間) と呼んでいる。 0 から 0x10FFFF がその範囲である。 そして、その空間に属する値を コードポイント (Code Point; 符号位置) と呼ぶ。 次の図は、抽象的な 「Å」 という文字と、対応する 符号化文字 (Encoded Character) を表現するコードポイント

    Unicode のサロゲートペアとは何か - ひだまりソケットは壊れない
  • プログラミング言語における文字コードの話

    世の中がほぼUnicode前提になってめでたしめでたし。とはいかなかった現実の話。 String型でできる文字列処理とか、ソースコード自体、特に識別子で使える文字とか。 軽くおさらい: Unicode まあいろんなところでいろんな人が書いてると思うのでさらっと概要だけ。 Unicodeは、元々、「65,536文字あれば十分だろ」とかいう幻想の元、2バイト固定長の文字コードとして作られていました。 もちろん足りなくて、ビット数を拡張。基が2バイトのままでこの拡張した分を取り扱えるようにしたのが今のUTF-16で、拡張分は2文字分(4バイト)を使って表現。 この、2文字分使って1文字を表すやつのことをサロゲートペア(surrogate pair: 代理対)と呼びます。 あと、ASCII文字も2バイトになるのを欧米人が嫌って、ASCII文字はASCIIコードのまま、逆に漢字・ひらがな・カタカナ

    プログラミング言語における文字コードの話
  • VC++でUnicode文字の出力を試みる→MessageBoxでの出力はできたけど標準出力の方法分からず - minus9d's diary

    前回の記事に引き続いて、VC++で日語文字を扱う方法についてあれこれ調べている。調べれば調べるほど、開いてはいけない蓋を開いているような気がしてならない。 今回はUnicode文字をVC++で出力することを目指した。結論から言うと、MessageBoxを使ってポップアップを開く方法ではUnicode文字を出力できたけど、標準出力で出力する方法は最後まで分からなかった。実験環境はWindows 7 + VS 2013 Express。 Unicode文字列を用意 ※はてなに貼り付けると一部の文字が数値文字参照になってしまったので、ideoneを参照してください 最初に、Shift_JISでは表せないけどUnicodeでは表せる文字列を探す。有名なのは「𠮟」という字。これは「叱」と似て非なる字。詳しくは新常用漢字が引き起こす文字コード問題 - 新常用漢字表が迫るUnicode移行、「シフト

    VC++でUnicode文字の出力を試みる→MessageBoxでの出力はできたけど標準出力の方法分からず - minus9d's diary
  • Visual C++雑多メモ ー TCHAR編

    Visual C++は、ワイド文字(Unicode)/マルチバイト文字のプログラムコードを、デファイン_UNICODEおよびUNICODEの制御だけで切り替えられるようにする仕掛け(記事ではTCHARと呼称)を用意しています。WindowsAPIやVisual C++の標準ライブラリはほとんどがこのTCHARの仕掛けを使っています。 ところが、アプリケーションコードでTCHARの仕掛けを使う場合に、どのようにプログラミングすればよいか、情報がまとまっていません。そこで、自分でプログラミングをしていて引っかかったり調べたことなどを雑多メモとして残すことにしました。 TCHARを使うと、標準C++プログラミングとは相性が悪いです。Visual C++というのはC++言語の亜種で、Windowsアプリケーション開発用言語として認識しておくのが吉。 概要 TCHARの仕掛けを使う場合、コンパ

  • その14 UNICODEで分けないtstring型を宣言する

    ホーム < ゲームつくろー! < Programming TIPs編 その14 UNICODEで分けないtstring型を宣言する Visual C++には文字セットとしてUnicode対応版とマルチバイト文字列対応版があります。これはプロジェクトのプロパティの構成プロパティにある「文字セット」で設定できます。 Unicode文字セットの場合2バイト文字を扱う事になります。型は通常wchar_t型です。一方マルチバイト文字セットは1バイト文字を扱うので方はchar型です。プログラマはプロジェクトの文字セットごとにこれを使い分ける必要があります。これは極めて面倒です。そこでVisual C++にはTCHAR型が用意されています。TCHAR型自体は次のように定義されています:

  • 第4回: Unicode 文字列の比較 - 葉っぱ日記

    すっかり間があいてしまいました。ごめんなさい。今回のテーマは Unicode 文字列の比較です。 文字列の比較には、プログラミング言語によっては s1 = s2 のように簡単な演算子で比較できる場合もありますし、strcmp や StrComp のような関数を呼び出す必要があるかも知れません。そんななかでも今回取り上げるのは、Windows API の CompareString です。実際には、Unicode 同士の比較ですので、CompareStringW ですね。 さて、CompareString 関数には第2引数 dwCmpFlags で比較の条件をいろいろ変更することができます。一般的によく使われそうなのは、大文字小文字を無視して文字列を比較するためのフラグ NORM_IGNORECASE でしょうか。 実際に、この NORM_IGNORECASE フラグを指定して a-zA-Z

    第4回: Unicode 文字列の比較 - 葉っぱ日記
  • charとUnicodeとワイド文字をごっちゃにしないために

    ホーム < ゲームつくろー! < C++踏み込み編 < charとUnicodeとワイド文字をごっちゃにしないために その4 charとUnicodeとワイド文字をごっちゃにしないために Visual Studio 2003あたりになってから、ちらほらと出てきたのが「Unicode」や「ワイド文字」という言葉。DirectXでもたびたびこれに苦しめられたりします。どうも世の中従来の1バイト文字からUnicodeへ過渡しそうな気配です。これらの文字の仕様については色々なサイトや辞書に詳しく説明されています。しかし、しっかりまとめないとやっぱり混乱してしまうもんなんです。「バイト文字をUnicodeに変換するのと、マルチバイト文字をワイド文字に変換するのは何が違うのか?」と聞かれたときに、すっと回答できますでしょうか?できる方はすばらしい。迷った方も大丈夫。世の中そんなもんです。 ここでは、c

  • UTF-8とUTF16の違いは?

    XML文書で使える漢字コードとして、UTF-8とUTF-16というのがありますが、この2つはどのように違っているのですか? 使い分ける必要はありますか? 回答/富士ソフトABC株式会社 技術センター 2001/9/14 UTF-8とUTF16の違いを一言でいうと、文字を表現するときの単位が違います。UTF-8は8ビットの可変長マルチバイトで文字を表現し、UTF-16は16ビットの可変長マルチバイトで文字を表現します。 それぞれの定義については以下のように少し難しい表現が使われています。 UTF-8 (8-bit UCS Transformation Format) UCS-2で定義される文字集合を用いて記述された文字列をバイト列に変換する方式の1つ。1文字を1~6バイトの可変長マルチバイトに変換する。UTF-16 (16-bit UCS Transformation Format): UC

  • Alpha の #?@! な日記

    0.7.90.1 出した 主にバグ修正。3 、40 個潰した。でも、まだまだという感じがする うーん、全然進まんな てか、今気付いたんだが、0.7.90.0 の URL が間違ってるじゃん。シオシオ アイコン新しいのにした。最近、アバウトボックスに表示してたやつがベース。ベクター画像で描くのに Sodipodi を使ってたんだが、Inkscape に乗り換えた (落ちなくなったので)。で、IcoFX でアイコンファイルにする。この IcoFX ってのは 32 ビットアイコン (XP で使うやつ) と Vista アイコンが作れて、ドロップシャドウとかもできるので、結構気に入った 新レイアウトエンジンの実装 その 36 : フォントのフォールバックが何とかなったっぽい Mozilla のコード見た (gfxWindowsFonts.cpp)。欠損グリフの検出方法が分かった。SCRIPT_FO

  • Unicodeについてのメモ

    Tony Graham(著),乾和志,海老塚徹(訳),関口正裕(監):『Unicode標準入門』,翔泳社,2001. 上記の“Unicode: A Primer”の訳. 翻訳版独自の注釈がたくさんついていて,たいへんお得な感じ(おすすめ).

  • 使いこなそうユニコード

    UCSとUTFとは? [2003-11-11] Unicode正規化とは [2008-01-14] Unicodeに関するメモ [2002-06-15] JIS X 0213とUCS/Unicodeとの対応について [2006-12-30] Unicode文字の表示例 (Unicode 4.1.0) [2005-04-23] JIS/SHIFTJISとWINDOWS/CP932との相違 [2001-07-08] JIS X 0208とUnicodeとの対応表/ZIP版 [2002-06-01] Shift_JIS-2004 (JIS X 0213:2004)とUnicode 3.2.0の対応表/ZIP版 [2007-01-03] [同じくShift_JIS-2004 (JIS X 0213:2004)とUnicode 3.2.0の対応表/非圧縮テキスト] ・JIS X 0213:2000

  • _T("")マクロだのL""マクロだのLPCTSTRだのの世界一詳しい解説

    _T("")マクロについて 初心者の方へ 下の説明を読むのが面倒なら次のように設定を変更すれば わずらわしい思いはしなくてもよくなります。 また、下の設定をすればLPCTSTRとか訳の分からないものはconst char *と同じ意味になり、 自分でコードを書く時にも_T("") などと書く必要もなくなります。 VisualStudio2005での設定例(2003や2008でもほとんど同じです): プロジェクト名で右クリックしてプロパティを選択 (ここでは太文字でcppTestと書いてあるやつ) 左側のツリーで構成プロパティ→全般を選択するとこのようなものが出てくる。 デフォルトでは文字セットのところが『Unicode 文字セットを使用する』となっているはず。 これを『マルチバイト文字セットを使用する』に変更してOKを押すと設定完了。 上級者向けの説明 おそら

  • 1