ECMAScript 2015 introduces two new flags for regular expressions: y enables ‘sticky’ matching. u enables various Unicode-related features. This article explains the effects of the u flag. It helps if you’ve read JavaScript has a Unicode problem first. Impact on syntax Setting the u flag on a regular expression enables the use of ES2015 Unicode code point escapes (\u{…}) in the pattern. // Note: `a
2015/09/11 Gistのライブラリをアップデートしました。 2014/10/13 Gistのライブラリをアップデートしました。 JavaScript 経由で Twitter に投稿する処理を持つウェブアプリはよくあると思う。そのときに実装する必要がある機能のひとつに文字数カウントの機能がある。 Twitter API に投稿リクエストをすれば、入力したツイートが文字数オーバーしていたかどうかはわかるけれど、ユーザー導線を考えて JavaScript 内でバリデーションを行いたい機会は少なくないはずだ。 はじめにお断りしておくと、この記事はあくまでもツイート文字列の文字数を * 正しく * 数えたい神経質な人向けなので、ある程度の精度でよいという方は他の方の作られたライブラリを参照するのがよいと思います。 ツイート文字数カウントのセオリー ふつうに、 $('#tweet').val(
ECMAScriptの仕様では、0x0A/0x0D以外にU+2028/2029の文字も改行とすることが明記されています。 これはあまり知られていないように思います。 以下はアラートを出します。 <script> //[U+2028]alert(1) </script> 知られていないだけでなく、知っていたとしても、スクリプトで文字列を処理するときに、U+2028/2029まで考慮する開発者がどれだけいるのかという話です。 実際、U+2028/2029を放り込むと文字列リテラル内にその文字が生のまま配置され、エラーが出るページは本当にたくさんあります。まあ、エラーがでるだけなら、大抵の場合大きな問題にはなりません。 ところが、U+2028/2029によってXSSが引き起こされてしまう場合というのを最近実際に見ました。 Googleのサービスで見つけた2つのケースを取り上げたいと思います。 ケ
928508 – String.prototype.@@iterator (and thus for-of) incorrectly iterates over code units rather than Unicode characters ちょいと面白いものが実装されて、String.prototype["@@iterator"]がアップデートされてた。 "@@iterator" というのは、ECMAScript 6th におけるイテレータとなるメソッドで、最近注目のジェネレータオブジェクトを返す。*1 で、このジェネレータオブジェクトのnextメソッドが、従来であればインデックス値に沿って順に値を返していたのだが、これからはUnicodeポイントに沿って値を返すようになる。UTF-16 においてサロゲートペアとなるような文字は従来は2文字として扱われていたのが、Unicodeポイン
The way JavaScript handles Unicode is… surprising, to say the least. This write-up explains the pain points associated with Unicode in JavaScript, provides solutions for common problems, and explains how the ECMAScript 6 standard improves the situation. Unicode basics Before we take a closer look at JavaScript, let’s make sure we’re all on the same page when it comes to Unicode. It’s easiest to th
Supplementary Characters for ECMAScript May 8, 2012 Terms and Definitions Text Interpretation Unicode Code Point Escape Sequences Regular Expressions Other Text Processing Functions Upgrade to Unicode with Supplementary Characters Code Point Based String Accessors What About UTF-32? History Update July 2015: This proposal has been integrated into the ECMAScript® 2015 Language Specification, which
追記1 SpiderMonkeyのサロゲートエリアのbug issue は修正されました! (該当commit) 記事の一番下を御覧ください. 追記2 V8のサロゲートエリアのbug issue は修正されました!(該当commit) これで以下の記事のサロゲートエリアのbugはV8, SpiderMonkey, JSCで修正されました 普段1.5ヶ月に1記事しか書かないのに, 今日は3つも書いて正気の沙汰じゃないで... id:piro_or さんよりcommentで, id:nanto_vi さんの以下の記事の話を受けましたのでー. (commentついたの1年ぶりで感涙) 文字列と UTF-8 バイト列の相互変換: Days on the Moon リンク先の記事では, 以下の方法によるUTF-16 <=> UTF-8の変換が記載されています. function toUTF8Octe
やっていることは「高度な JavaScript 技集」の「UTF-8 <-> UTF16 変換」と同じ。 function toUTF8Octets(string) { return unescape(encodeURIComponent(string)); } function fromUTF8Octets(octets) { return decodeURIComponent(escape(octets)); } encodeURIComponent は encodeURI でもいい (むしろそのほうが処理する文字種が減って速くなりそう) が、decodeURIComponent は decodeURI にすると一部の文字 ("?"、"#" など) がデコードされなくなる。 使いどころ Base64 エンコードする関数 (「高度な JavaScript 技集」の base64encod
Note 本コンテンツの一部は、業務時間内に調べた内容を含んでおり、株式会社ディー・エヌ・エーの提供でお送りしております。 とある理由で全角、半角の判定が必要になったのですが、簡単技(SJISなどに変換してバイト数計測など)はつかえなかったため、自作する方向で調べて見ました。 Pythonには unicodedata.east_asian_width() という関数があり、 エキスパートPythonプログラミング というすばらしい書籍の日本語オリジナルの文字コード関連の章によると、この関数が "F" 、 "W" 、 "A" (ただし、Aはフォントにより変わる曖昧な文字)が返すと全角としてカウントすればよい、と書かれています。 こちらを参考にJavaScriptの全角/半角判定を行った幅計算を実装してみます。 まずJavaScriptを知る¶ JavaScriptは内部では、UTF-16とい
unicode utf-8 utf-16?文字コードについて、なんとなくutf-8を使ってりゃいいやって考えているエンジニアは多いんじゃないかと。 自分もその一人だったりするし。 unicodeとutf-8、utf-16の違いを理解しておく。 まず、unicodeとutf-8/16の違いはutfの略称を調べればおおよそ見当がつく。 Unicode Transformation Format直訳すればunicodeの変換形式。システム的な言い方なら符号化方式とかいった感じか。 unicodeって言うのは文字集合体で、それをバイト列に変換する方式がutf-8/16です。 utf-81文字は1バイト~6バイトで表される。 utf-161文字は2バイト、または4バイトで表される。ASCIIも2byteで表現される。 4バイトの文字はサロゲートペアと言われ、最初の2バイトがU+10000~U+10F
BMP being Basic Multilingual Plane According to JavaScript: the Good Parts: JavaScript was built at a time when Unicode was a 16-bit character set, so all characters in JavaScript are 16 bits wide. This leads me to believe that JavaScript uses UCS-2 (not UTF-16!) and can only handle characters up to U+FFFF. Further investigation confirms this: > String.fromCharCode(0x20001); The fromCharCode metho
2008-11-13 カテゴリ: Client Side タグ: Tips JavaScript Unicode 先日、JavaScriptでサロゲートペアに対応した文字列関数を書いたりしてみたが、これだけだとサロゲートペアの扱い方を思い出すにはわかりづらいので、わかりやすくまとめ直してメモっておこうと思う。 前提知識 サロゲートペアを使って表現できるコードポイントの範囲はU+10000-U+10FFFFだけ (だから、UnicodeはU+10FFFFまでしかコードポイントを割り当てない仕様になってる!) サロゲートコードポイントはU+D800-U+DFFFの2048個 (11ビット) 2048個を上位サロゲート (U+D800-U+DBFF) と下位サロゲート (U+DC00-U+DFFF) に分けて、上位サロゲートと下位サロゲートの組み合わせ (1024*1024) でU+10000-
前置き おはミルキィ! ChromeFullFeedが公開停止になった話を前置きとして書いていたのですが, あまり関係がないのと, 長くなりそうになってきたので, 別の記事に分けました. http://d.hatena.ne.jp/Constellation/20110530/1306701693 概要 という前置きで. ECMAScriptと切っても切れない文字コード, UTF-16. iv / lv5はUnicode変換のためにICUに依存していたのですが, UTF-8 <=> UTF-16なら何とか自分でも書けるのではないかと思い, Unicode Converterを書きました. これでlv5の依存はlibboost, libgc (Boehm GC)に減りましたー. Unicodeの変換の教授, bugつぶしにおいて, id:masa141421356 さんに非常にお世話になりま
Having recently written about character references in HTML and escape sequences in CSS, I figured it would be interesting to look into JavaScript character escapes as well. Character codes, code points, and code units A code point (also known as “character code”) is a numerical representation of a specific Unicode character. For example, the character code of the copyright symbol © is 169, which c
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く