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年代後半から急速に普及が進んでいったこ
TL;DR Shift_JISにしただけでコンパイラが通らなくなる恐ろしい事件とその回避法について。 \ (¥)のASCIIコードは0x5c 表、能は良くない UTF-8は神 2023/12/06追記 誤りがあったので訂正します。こんな読まれると思ってなかったので正直ちょっとびっくりしていますが、いろいろコメントありがとうございました。(ツイート等全て拝見しました。) Shift_JISが悪いわけではない(デフォルトのエンコーディング設定の問題)→追記しました UTF-8にはUTF-FSSという仕様でこの問題が回避されている→マジでタメになる知識ありがとうございます OSによってデフォルトのエンコーディング設定が異なるせいで、デフォルト環境での動作がOSにより異なる→なるほど?(調査中) CRLFとLF問題では→なるほど?(調査中) そんな問題何を今更→UTF-8が出てから生まれたからです
携帯電話を用いたコミュニケーションの手法の1つに「絵文字」がある。日本で生まれたこの絵文字は、GoogleとAppleによって標準化され、今ではさまざまなスマートフォンやPCでもでも閲覧できる。 その一方、ドコモで販売されるAndroidスマートフォンには、いまだフィーチャーフォン時代の絵文字が表示される。しかしこれが今のスマートフォンにそぐわない側面が出ている。この絵文字問題について考察したい。 今の絵文字は日本のものをベースにGoogleとAppleが標準化を提案 絵文字を携帯電話に採用したのは、NTTドコモが最初だ。この後にDDI(現au)、J-フォン(現ソフトバンク)が採用する形で続く。絵文字にはシフトJISというコードが用いられていたが、互換性維持の空き領域に絵文字を割り当てたことから、キャリア間で互換性がなく、文字化けの要因となっていた。 後に自動変換サービスも展開されたが、使
「出願システム」トラブルまとめ https://kanagaku.com/toraburu 広告 Twitter「受検票が印刷できない」 文字化けの様子 神奈川県の受験サイトでの受験票印刷、iPadとスマホから印刷しようとしたら文字化けしてしまった。 PCから無事印刷できたから良かったけど、ちょっと焦ったよね pic.twitter.com/LcDbrGdRYj — ころ (@koronosuke01) February 9, 2024 https://web.archive.org/web/20240209035717/https://pbs.twimg.com/media/GF2xYdBagAA0NOG?format=jpg https://megalodon.jp/2024-0209-1257-08/https://pbs.twimg.com:443/media/GF2xYdBagA
導入 アイヌ語は日本語と異なり、閉音節(子音で終わる音節)も存在するので、表記の際音素文字であるラテン文字なら、そのまま p, t, k, m, n, s, r などの子音文字を後ろの付ければ良いわけなので、アイヌ語ローマ字表記では、何も問題が生じない。しかし、元々開音節言語である日本語に特化したカタカナのような仮名文字で表記する際、鼻音 n は「ン」でなんとかなる(実はそれでもまずい事になっているけどここでは割愛する)が、p, t, k, m, n, s, r, h はどうしようもないので、特殊の捨て仮名(小書き仮名文字)を利用することになっている。 具体的には以下のような特殊仮名文字(通称 アイヌ語仮名)である。 ㇷ゚ -p ッ -t ㇰ -k ㇺ -m ㇱ -s ㇻ -(a)r, ㇼ -(i)r, ㇽ -(u)r, ㇾ -(e)r, ㇿ -(o)r お分かり頂けただろうか… 問題 r
現在の私たちが何気なく使っている絵文字たち(😀🥺💦💕🏠💻🌊😈🐱💢…)って、実は誰でも提案📝📮することができて、「この絵文字はワシが作った👴」と言えるチャンス💪があることをご存知ですか❓🤔 このスライド📄では、普段あまり知ることのないUnicode Emoji😀(絵文字の代表格)の仕様策定の流れ💨や、Emojiを提案する方法🙆♀️を簡単にご紹介👩🏫します! ✅ Zennに本スライド以外の内容(📊通過率・🗑️Emoijのボツ案など)を含めて載せてます↓ https://zenn.dev/cybozu_frontend/articles/how_to_propose_a_new_emoji ※本資料は、2023年6月30日にサイボウズで開催された社内イベント「フロントエンドデー」における登壇資料に一部編集を加えたものです。 ※ここに掲載の内容は2
はじめに 2023年、長い時を経て awk がとうとう Unicode (UTF-8) と CSV に対応しました 🎉🎉🎉 awk で日本語がうまく扱えない(場合がある)、Excel が出力する CSV ファイルが扱えない(場合がある)、といった問題が解決に向けて一歩に進みます。 去年、本家 awk (One True Awk, nawk) に Unicode サポートが Brian Kernighan の手によって追加されたと話題になった(参照)ことを覚えているでしょうか? Brian Kernighan が誰だか知らない方がいるかもしれないので説明すると、オリジナルの awk の開発者の一人で awk の頭文字、Alfred Aho、Peter Weinberger、Brian Kernighan の一人です。通称「K&R」の「プログラミング言語C」や「プログラミング言語AWK」
日本で誕生し、現在では世界中の人たちが、 文字通り日常的に活用している「絵文字」。 海外でもそのまま「EMOJI」で通じる世界語となっており、 日本独自の絵文字がそのまま海外でも使用されていますが、 日本の文化に根差している絵文字は、 外国人には通じないこともしばしばあるようです。 今回ご紹介する写真は、日本人の方がドイツで撮影したもので、 フランクフルト国際空港のロゴが写っています。 そのロゴが漫画やアニメで多用される「怒りマーク💢」に見える事から、 投稿者のTatsunoshin(@tatsunoshin_ofc)さんは、 「フランクフルト空港常にキレてるんやけど何?💢」と、 率直な疑問をぶつけておられます。 海外の多くの人々にとって「💢」に「怒り」のイメージはなく、 むしろ漠然と見ていた謎のマークである事から、 この疑問が外国人には非常に面白く、興味深かったようで、 多くのサイ
まえがき ミャンマーでは公用語としてビルマ語が使われている。ビルマ語の表記にはビルマ文字を用いるのだが、このビルマ文字のインターネット上での使用は、混迷を極めていた。そしておそらく今もまだ…。なぜか? それは、Unicodeという文字コードの標準がありながら、Zawgyiというものが広く使われていたためである。なぜそのようなものが登場し、普及することとなったのか、この記事で解説する。 目次 まえがき 目次 凡例 この記事で使う名称について ビルマ語表記 コードポイント ラテン文字表記について Zawgyiの概説と歴史 Zawgyiとは Zawgyiのダウンロード Zawgyi誕生・普及の経緯 複雑なビルマ文字 ビルマ文字とUnicode 回避策としてのビルマ文字フォントの登場 Zawgyiの普及 Zawgyiの実装 実装の方針 文字の並べ替えをせず、左から右に書く 文字の形のバリエーション
Windowsでは、文字コードに「ユニコード」を使う。Windowsに搭載されているフォントはさまざまあるが、ユニコード文字を表示できるように、多数の文字の形が組み込まれている。 今回は、Windowsでユニコードを“見る”方法について解説する。なお、WindowsではUTF-16LEエンコードをUnicodeと表記する。ここでは、エンコードと混同されないために、文字仕様のUnicodeは「ユニコード」とカナ書きすることにする。 GUIアプリでユニコードを使う ユニコード文字は多数ある。それぞれの文字に割り当てられた文字コードをユニコードでは「コードポイント」と呼ぶ。コードポイントは、「U+」の後ろに16進数4桁または6桁で指定するのが正式な表記方法だ。たとえば、「漢」は「U+6F22」となる。ユニコード関連の文書やもちろん、インターネット内のウェブページでも同様の表記をすることが多い。
令和5年9/12にユニコード15.1が正式公開され、CJK漢字拡張-Iの他に“漢字構成記述文字”に指示記号4種、“CJK筆画”に拡張漢字構成記述文字の指示記号が1種類追加されました。ユニコードに採用されていない字の説明がしやすくなったのが重要です。𝚄+𝟹𝟷𝙴𝙵の一部除去指示記号は文字構成要素の一部が削除されていることを示す記号です。 漢字構成記述文字記号をラテン・ギリシャ・キリル各文字体系に応用した例で、ユニコードに採用されていない左右逆になる字形と逆になる字形を説明しやすくなりそうです。画像はにしき的フォントに含まれるユニコード未登録のラテン・ギリシャ・キリル各種字母を漢字構成記述文字記号で説明した例です。
行政機関が管理する膨大な数の「文字」がデジタル改革を阻んでいる。字形がわずかに異なる文字も含め、戸籍だけで約70万字。岸田文雄政権は自治体の情報システムを効率化するため、約7万字に絞り込む計画だ。だが、人によっては名前の漢字が変わる可能性があり、慎重論もくすぶる。文字を決めるのは誰なのか――。 スマホに表示できない 「スマートフォンやパソコンで表示できない文字がある。魑魅魍魎(ちみもうりょう)とした世界だ」 デジタル庁幹部は、戸籍などで使われてきた文字の特異性をそう表現し、「自治体システムを複雑にし、ガラパゴス化させた元凶だ」と言い切った。 政府は、自治体ごとに仕様がばらばらな戸籍や住民基本台帳、国民年金など20業務の情報システムを2025年度末までに標準化する方針を掲げている。 人口減少で公務員の確保が難しくなる中、システムの効率的な運用で行政サービスの質を維持する目的だ。多すぎる文字を
NFCではそのまま「パ」として表されますが、NFDでは「ハ」(基底文字)と「゜」(結合文字)の組み合わせとしての「パ(UTF-8でe3 83 8f e3 82 9a)」(合成文字)で表されます。試しにNFDで正規化された「パ(e3 83 8f e3 82 9a)」を任意のテキストエリアに貼り付けて削除してみると、半濁音のみが取れて「ハ」のみになると思います。 このように文字列の正規化形式が異なる場合、単純な比較演算子での評価は困難であり、文字列によっては想定外の挙動を引き起こす可能性があります。 特にMacファイルシステムではNFDを正規化方式と採用しているため、NFC/NFD問題が度々引き起こされています。先日(2023年03月27日)リリースされた「macOS 13.3 Ventura (22E252)」では、ファイル名に濁音や半濁音が含まれるファイルがFinderから開けなくなる
日本語が本格的に使えるようになりだした頃、そのコードはJISコードを巧妙に細工してモード切替を不要にしたシフトJISと呼ばれるものが使われました。当時は英語のみが使える環境でプログラムが作られることが殆どだったので、これを移植して日本語を扱えるようにすれば充分だということだったのです。 文字コード 最初に使われたのはCP/M-86という説もありますが、一般的に使われるようになったのはMS-DOS(PC-DOS)が最初です。これはWindowsにも引き継がれ、Macintoshも日本主導で日本語化が行われたという経緯もありシフトJISが使われました。 さてシフトJISの問題は米国標準であるASCIIに対する拡張であって、それ以外の国のローカルコードのことを考えていないことです。例えば英国では一部の記号がポンド記号に置き換わっているコードが使われていましたし、他のヨーロッパ諸国の言語でもいろい
最近 ratatui という crate に Small String Optimization を利用した最適化を入れたので,その話を書きます. 目次 Small String Optimization (SSO) とは(SSO を既に知っている人は読み飛ばして大丈夫です) Rust で SSO を適用した文字列型を提供する crate 比較 SSO を利用して ratatui のメモリ効率と実行効率を最適化した話 compact_str crate の実装の最適化の話 インラインストレージに24バイト全てを使える理由 隙間最適化のための工夫 説明を簡潔にするため,特に断りが無い場合 64bit アーキテクチャを前提とします. Small String Optimization (SSO) とは Rust の可変長文字列型 String は文字列バッファへのポインタ,文字列の長さ,バッフ
本記事は 【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バ
既存アプリやライブラリへの影響が大きく、この変更に対してネガティブなフィードバックも多かったためリバートされました。 github.com 概要 表題の通り、Rails v7.1.0 で APOSTROPHE (U+0027) が SINGLE QUOTATION MARK (U+2019) に変わります。 github.com 既存のRailsアプリをアップグレードする際に影響が大きそうなので、記事を書きました。 影響範囲 テストでエラーメッセージを検証していた場合、Rails v7.1.0 のアップグレードによって検証に失敗するようになります。 Expected: "can't be blank" Actual: "can’t be blank" 今回の変更を知らない場合、このテストのエラーメッセージだけで ' と ’ の違いを見分けるのは厳しそう。 SINGLE QUOTATION
物事の順位付けをするとき、松竹梅という雅な表現がよく使われる。自分もよく使う。 blog.3qe.us コンピュータにとってもそうなのだろうか?そう考えた私は実際にソートしてみることにした。 % echo $LANG ja_JP.UTF-8 % sort --version sort (GNU coreutils) 9.3 Copyright (C) 2023 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permit
こんにちは!サイボウズ株式会社フロントエンドエンジニアの おぐえもん(@oguemon_com) です。 先日開催された社内イベントCybozu Frontend Day 2023にて私が発表した絵文字の仕様策定に関する紹介を、当時の時間的制約から泣く泣く割愛した内容を加えた上で文章の形にまとめました。 また、情報は全て2023年8月1日現在のものです。 はじめに 今や「ぴえん🥺」や「おじさん構文」などの様々な形で老若男女を問わず私たちの生活・文化に深く根ざしている絵文字。ところで、そんな絵文字たちにも生みの親がいることを意識したことがありますか? 例えばこちらの絵文字にも生みの親がいます。 🥱は、Jay Petersさんが2017年9月に提案しました。 Jay Petersさんの職業はニュース編集者。決してデザイン事務所やGAFAなどのエンジニア・デザイナーではありません。 このよう
先日以下の記事を書きました。 ここで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 }
こんにちは!アルダグラムのKANNAの開発お手伝いをさせて頂いているoubakiouです。 本記事は株式会社アルダグラム Advent Calendar 2023 6日目の記事です。 この記事を読めば以下のTypeScript(JavaScript)のテストコードがなぜこけるのかが分かったような気持ちになります。また最後に「細かい理屈はいいからいけてる感じに動くlengthやtruncateがほしい!」という方向けの付録もついています。 it('surrogate pair', () => { // 2 expect('😊'.length).toEqual(1) }) it('variation selectors', () => { // 4 expect('👍🏿'.length).toEqual(1) }) it('combining character', () => { //
UTF8文字列生成を最適化するライブラリ Utf8StringInterpolation を公開しました 2023-10-13 Utf8StringInterpolationという新しいライブラリを公開しました!UTF8文字列の生成と書き込みに特化していて、動作をカスタマイズした文字列補間式によるC#コンパイラの機能を活用した生成と、StringBuilder的な連続的な書き込みの両方をサポートします。 Cysharp/Utf8StringInterpolation 基本的な流れはこんな感じで、Stringを生成するのと同じように、UTF8を生成/書き込みできます。 using Utf8StringInterpolation; // Create UTF8 encoded string directly(without encoding). byte[] utf8 = Utf8String
これはRubyアドベントカレンダーとSmartHRアドベントカレンダーの17日目の記事です。 qiita.com qiita.com 12/9 に nagano.rb で文字について発表して、同じのを 12/15 に SmartHR 社内で LT しました。 スライドはこちら speakerdeck.com 同じ文字? この2つの文字は同じものに見えますか? 実はこれは同じ文字を異なるフォントで表示したものです。 ゴシック体と明朝体で字体が異なって見えるのと同じことなので、同じ文字と言えるでしょう。 コンピュータで扱う文字は文字ごとに番号(コードポイント)が振られていて、プログラムから見たときには同じコードポイントであれば同じ文字として扱われます。 Ruby で文字のコードポイントを得るには String#ord を使用できます。 '直'.ord.to_s(16) #=> "76f4" '
Intl.Segmenter についておさらい JavaScript には Intl と呼ばれる国際化 API があり、日時や数値のフォーマットを始めとする国際化に便利な機能が揃っています。Intl.Segmenter はこの Intl の一機能で、文字・単語・文章単位での文字列分割を可能にします。 文字単位での分割では複数のコードユニットやコードポイントを持った文字を考慮し、正確に見た目上の1文字(書記素)で分割できるので、絵文字を含んだ文字数のカウントなどに便利です。 const segmenter = new Intl.Segmenter("ja", { granularity: "grapheme" }); console.log("🇯🇵👨🏻💻".length); // ❌ 11 console.log([..."🇯🇵👨🏻💻"].length); // ❌
This grinning cat emoji has alert feline instincts with its eyes wide open. This kitty’s proud smile says, “please let me eat the rest of that tuna” and is the perfect face for cat lovers who want an alternative to the plain grinning face emoji. Use this emoji as a greeting for your crazy cat lady friends. Copy
SmartHR でプロダクトエンジニアをしている tmtms です。読み方がわからない(自分でもわからない)ので社内では tommy と名乗ってます。 2月に開催された社内LT大会第3回で「ショートカットと端末」というネタで発表したのですが、とても5分に収まる量ではなかったのでここにしたためておきます。 キーバインド macOSのテキスト編集のショートカットとEmacsとbashのキーバインドを比較するとこんな感じです。 control macOS Emacs bash A 行頭に移動 行頭に移動 行頭に移動 B 左に移動 左に移動 左に移動 C - prefix 中断 D 右文字削除 右文字削除 右文字削除/入力終了 E 行末に移動 行末に移動 行末に移動 F 右に移動 右に移動 右に移動 G - 中断 中断 H 左文字削除 ヘルプ 左文字削除 I - タブ タブ J - 改行 改行 K
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く