タグ

unicodeに関するdelegateのブックマーク (47)

  • Goの標準のutf8.RuneStart関数がエレガントすぎる

    先日以下の記事を書きました。 ここでUTF-8の最初の文字かどうかの判定を以下の自作した関数で実装していました。 const ( t1 = 0b00000000 tx = 0b10000000 t2 = 0b00000110 t3 = 0b00001110 t4 = 0b00011110 ) func isUTF8LeadByte(tmp byte) bool { if tmp&tx == t1 { return true } tmp >>= 3 if tmp == t4 { return true } tmp >>= 1 if tmp == t3 { return true } tmp >>= 1 if tmp == t2 { return true } return false }

    Goの標準のutf8.RuneStart関数がエレガントすぎる
  • 私の名前ってUnicodeでどう表すの?~異体字セレクタとの出会い~ - NRIネットコムBlog

    記事は 【Advent Calendar 2023】 17日目の記事です。 🎄 16日目 ▶▶ 記事 ▶▶ 18日目 🎅 こんにちは。 2年目の草野です。年末が近づいてきましたね。 今回はAdvent Calendarの執筆に参加ということで、2023年の業務の中で印象深かったUnicodeについて少しお話したいと思います。 そもそもUnicodeとは サロゲートペア文字 突然ですが…… 異体字セレクタとの出会い 異体字セレクタって? 全く同じ意味を持つ文字、異体字 異体字セレクタの誕生 具体例 結局私の名字はどう書くの? おわりに そもそもUnicodeとは みなさんご存じの通り、Unicodeは文字を表すための国際的な標準規格の1つです。 一般的には [U+91CE] のように、16進数で表記されます。 常用文字は [U+0000] ~ [U+FFFF] の16進数4文字=2バ

    私の名前ってUnicodeでどう表すの?~異体字セレクタとの出会い~ - NRIネットコムBlog
  • ゴゴコ゛ゴゴゴコ゛をゴゴゴゴゴゴゴにするGo言語のライブラリを作ってみた - Qiita

    はじめに Unicode 正規化って日語の処理に向いていないというか、ちょっと使いどころが難しいと思いませんか? ということで、Golang のノーマライゼーション・ライブラリを作ってみました。使えるレベルに仕上がったと思うので GaGa という名前で公開します。 Unicode 正規化に関しては、既に Golang の準標準ライブラリに、 golang.org/x/text/unicode/norm golang.org/x/text/width というパッケージがありますが、今回作ったものと機能を比較すると以下のような違いがあります。 機能など gaga norm width 補足

    ゴゴコ゛ゴゴゴコ゛をゴゴゴゴゴゴゴにするGo言語のライブラリを作ってみた - Qiita
  • 標準出力にユニコードを出力させる - わびさびサンプルソース

    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についての最低限の知識

    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についての最低限の知識
  • VC++のUnicodeコンソールアプリケーションで作るときの初期処理 - mogmo .NET

    mainではなくwmainを使う コンソールに日語出力できるようにする wprintfを使用する std::wcoutを使う 引数を受けとる キーを入力するまでポーズする 文字列を扱うときはマクロを使う データ型 文字列 CString 次回 mainではなくwmainを使う ユニコードアプリの場合,wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )を使用します。 デフォルトのコードではmainとなっているので,関数名と引数を適宜変更しましょう。 コマンドライン引数も,ユニコードの場合はワイド文字列データ型のwchar_tにしましょう。 Debug版のアプリケーションは起動するが,リリース版で起動せず終了してしまう現象が発生。 コンソールに日語出力できるようにする wprintfやstd::wcoutを使ってコンソールに文字列を出

    VC++のUnicodeコンソールアプリケーションで作るときの初期処理 - mogmo .NET
  • Windowsのwprintf関数はUnicodeを出力できない?

  • Unicode をレンダリングするときは言語情報を渡しましょう - blog.8-p.info

    ソフトウェアの日語文字が中華フォントに侵されていて想像以上の危機らしい「違和感すごい」 というのが盛り上がっていた。 「想像以上」は主観的だけど、個人的にはちょっと煽りすぎのように思った。 前提: Han Unification はひっくりかえせない そもそも、UTF-8 がよく使われるようになって、絵文字もはいった UCS で、Han Unification しなくてもいいのでは、という話はある。 でもこれは後の祭りで、今更ひっくりかえすのは無理だと思うので、ここでは検討しません。 ユーザー側の言語情報を参照すれば、日語のグリフは選べる ほとんどの OS には、このユーザーの言語はこれですよ、という情報があって、それでメニューやボタンの文字が日語になる。日付の表示方法とかも、これを参照する。統合漢字でも日語のグリフでレンダリングしたい、というのは、8割くらいはこれで解決するはな

  • 文字コード地獄秘話 第1話:Unicodeにおける全角・半角 | ALBERT Engineer Blog

    ごあいさつ 皆様はじめまして、文字コードおじさんです。細々とカメラ屋を営んでおりましたが、エンジニアとしての技量を評価され、ALBERTのシステム開発・コンサルティング部で働くことを許されました。特技はサーバーの統廃合です。 今回は最初ということですが、Unicodeにおける全角・半角の取り扱いについて触れてみようと思います。なお、さも連載するかのように第1話と銘打っていますが、上層部の無慈悲な裁決によっては1話打ち切りもありえますので、その際はご容赦ください。 固定観念を捨てよう 「全角50文字、半角100文字まで」といったような文言を見かけたことがあると思います。 特にUnicode以前のレガシーな処理系では全角文字に2バイト、それ以外は1バイトという割り当てが慣習となっていました。 このため、「全角=2バイト文字、半角=1バイト文字」という観念が世間に定着しているのが現状です。 しか

  • Unicode(ユニコード)

    デバイスやOSを問わず、システムの標準的な文字コードとして広く使われるようになった文字コード「Unicode」。その特徴や登場の背景、キーとなる技術をまとめる。 連載目次 「Unicode」(ユニコード)は、世界中の文字を1つの文字コード体系で扱えるように作られた、文字コードセットの規格。現在のコンピュータシステムでは内部コードをこのUnicodeにして、世界中でほぼ同じバイナリーコードを使えるようにしていることが多い。Unicodeコンソーシアムが規格を策定している。 Unicode登場の背景 Unicodeが登場するまでは、コンピュータシステムではShift_JIS(主にDOSやWindows)やEUC(Extended UNIX Code、主にUNIX)、EBCDIC(主にメインフレームコンピュータ)などのコードが使われていた。 これらは、英語ともう1つの言語(日語や中国語など)を

    Unicode(ユニコード)
  • Go 言語と Unicode 正規化

    今回は少し目先を変えて「Unicode 正規化(normalization)」のお話。 2羽の「ペンギン」 まず「ペンギン」という文字列を思い浮かべてみる。 この文字列を Unicode のコードポイントで表すと以下のようになる。 ペ:U+30DA ン:U+30F3 ギ:U+30AE ン:U+30F3 ところでペンギンの「ペ」と「ギ」は半濁点および濁点を含む。 Unicode は「ペ」と「ギ」をそれぞれ2つの要素に分解できる。 ペ:U+30D8 + U+309A ン:U+30F3 ギ:U+30AD + U+3099 ン:U+30F3 U+309A および U+3099 はそれぞれ半濁点と濁点を表す「結合文字(combining character)」である。 「ヘ」や「キ」のような「基底文字(base character)」に結合文字を1つ以上1 付加した文字を「合成列(composite

    Go 言語と Unicode 正規化
  • Python で Unicode 正規化 NFC/NFD の文字列を扱う - forest book

    先日、ビジネスパーソン向けの Python を執筆したことを書きました。 t2y.hatenablog.jp 稿では書のことを「できるPy」と呼びます。 Amazon でいくつかカスタマーレビューもいただいて次のコメントをみつけました。 python3.7 対応ということで、pathlib を使ってる点が(古いpython は切り捨てる!的なところは)潔いと言えば潔いし、日語のファイル名にも気を配っている記述はオライリーに期待するのは酷なところもある。でもこのでもNFD問題は全くの記述無し。だめだろ、それじゃ。 Amazon CAPTCHA まさに仰る通りです。執筆時にそのことに気づかずご指摘いただいてありがとうございます。 ここでご指摘されている NFD 問題というのは、ファイル名のみに限った問題ではなく、Unicode の文字集合を扱ってエンコード/デコードするときに発生する

    Python で Unicode 正規化 NFC/NFD の文字列を扱う - forest book
  • 一般社団法人文字情報技術促進協議会

    ISO/IEC JTC 1/SC 2 委員会で審議を予定している提案内容について、 日の国内外のみなさまから、広くご意見をうかがうため、 共同で公開レビューを行うことと相成りました。

  • 文字列を反転させたい|nona

    こんにちは。徒然なるままにTweetを眺めていたら、Tanakaさんがこのようなことを呟いていました。 そういやRustのStringにreverseメソッドないなと思ったけど、まあよく考えたらUTF-8で文字逆転させるとか地獄のような話になるしそもそも長さが変わるケースとかあったりしそうで怖いわな・・・(´・_・`) — Hideyuki Tanaka (@tanakh) May 1, 2021 背景等はよくわからないですが、文字列の反転というのは確かに難しい問題ですし、どう難しいのかというのを、ちょっと真面目に考えて解説してみました。というノートです。 文での表記についてこれから文字とそのバイト表現の話をしていきます。文字のエンコードの方式で同じ数値でも色々意味が分かれてしまいますので、文では以下のように表記することにします。 Unicodeコードポイント(以下、単にコードポイント

    文字列を反転させたい|nona
  • 【Unicode順】数字英字カタカナひらがな漢字の順にsortする - (O+P)ut

    やりたいこと UNIX環境にて以下のような文字列のファイルを $ cat testmoji.txt Apple りんご イチゴ 15 メロン 葡萄 いちじく BananaUnicode順(数字→英字→片仮名→平仮名→漢字)に並べ替える。 環境情報 $ sort --version sort (GNU coreutils) 8.26 $ echo $LANG ja_JP.UTF-8 やり方 sortコマンドにLANG=ja_JP.Unicodeを付与する。 $ cat testmoji.txt | LANG=ja_JP.Unicode sort 15 Apple Banana いちじく りんご イチゴ メロン 葡萄以下、補足です。 補足 日語が入っているファイルに対してsortを行う際は文字コードに気を遣う必要があります。 例えば以下のようなUTF-8 Unicode形式のファイルを $

    【Unicode順】数字英字カタカナひらがな漢字の順にsortする - (O+P)ut
  • 第4回: Unicode 文字列の比較 - 葉っぱ日記

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

    第4回: Unicode 文字列の比較 - 葉っぱ日記
  • 文字コード地獄秘話 第2話:聖母マリアよ、二人を何故別々に? | ALBERT Engineer Blog

    はじめに 二人を最初から一つにしておけば、何も問題など起こらなかったのだ。 一つのものを二つに分けたその時から、長い物語が始まる。 おや?また会いましたね。どうも、文字コードおじさんです。 もう半年近くも前になりますが、前回の投稿はだいぶ反響があったようで驚いております。ありがとうございます。 今回も文字コードネタですが、Unicodeにおける結合文字列を取り上げてみようと思います。 高度に発達した文字コードは地獄と見分けがつかない 次の画像はTwitterの投稿フォームですが、おかしな点があります。わかりますか? そうです。4文字しか入力していないはずなのに 5文字分とカウント されていますね。おかしいと思いませんか?あなた? 改行とかスペース入れてるんじゃねーだろうな?とか言わないで下さいね? さらに次の画像を見てみてください。 こちらは4文字とカウントされていますね。先のものとは一体

    文字コード地獄秘話 第2話:聖母マリアよ、二人を何故別々に? | ALBERT Engineer Blog
  • 普通のUnicodeはNFCなのか – ものかの

    「普通のUnicodeはNFC」というおかしな風説が流布されています。文字っ子にしてみれば「なに言ってんの?」となるのですが、この風説のどこがおかしいのかを説明しようとすると途方に暮れます。もうどこから突っ込んでいいのか分からない。 一番難しいのは「普通のUnicode」自体が何を指しているのか分からないことです。Unicodeに「普通」とか「普通じゃない」なんて区別はありません。でも区別してそう言っている。どこで区別しているんだろう? zrbabblerさんがブログ記事「“普通のユニコード”は NFC なのか」を公開されました。ここでは「普通のUnicode」を「レガシーエンコーディングから変換して得られたUnicode文字列」としています。実証的な説明をするにあたってこれしかないというくらいに秀逸ですし、説得力があります。 ただ、「普通のUnicode」と言っている人たちは、そういう意

    普通のUnicodeはNFCなのか – ものかの
  • Delphi 2009 と Unicode : 番外編 (結合文字列)

  • 書記素分割/Unicode カテゴリー判定 | ++C++; // 未確認飛行 C ブログ

    なんか、昔作ったGraphemeSplitterがC++方面のUnicodeがらみのブログから参照されてたので、ちょっと補足。 UNICODE TEXT SEGMENTATION 「書記素って何?」って話は詳しくは昔書いた記事でも見てもらうとして。 とりあえず、「人間が見て1文字と思うようなもの」を指して書記素(grapheme)といいます。複数の Unicode コードポイントが結合しまくるので、可変長。 いつも例に出すのが家族絵文字(👩🏻‍👦🏼👨🏽‍👦🏾‍👦🏿👩🏼‍👨🏽‍👦🏼‍👧🏽👩🏻‍👩🏿‍👧🏼‍👧🏾とか)ですが、1書記素で11コードポイント、UTF-8で41バイトになったりします。 で、問題は、書記素の機械的な判定方法。 コンピューター上でもちゃんと書記素単位で処理してくれないと、人間の感覚からすると「backspace/dele

    書記素分割/Unicode カテゴリー判定 | ++C++; // 未確認飛行 C ブログ