日本語版
最新ニュース
科学&テクノロジー

JavaScript で UTF-8 文字列をどれくらい速く検証できますか? – ダニエル・レミアのブログ

ディスクまたはネットワークからテキスト コンテンツを復元する場合、それが UTF-8 の Unicode 文字列であることが期待される場合があります。 最も一般的な形式です。 残念ながら、すべてのバイト シーケンスが有効な UTF-8 であるわけではなく、検証せずに無効な UTF-8 を受け入れるとセキュリティ リスクが発生します。 JavaScript ランタイムで UTF-8 文字列を検証するにはどうすればよいでしょうか? valid-8 モジュールを使用することもできます。 import valid8 from "valid-8"; if(!valid8(file_content)) { console.log("not UTF-8"); } もう 1 つの推奨されるアプローチは、TextDecoder がエラー時に例外をスローできるという事実を利用することです。 new TextDecoder("utf8", { fatal: true…

JavaScript で UTF-8 文字列をどれくらい速く検証できますか?  – ダニエル・レミアのブログ

1705785200
2024-01-20 19:56:10

ディスクまたはネットワークからテキスト コンテンツを復元する場合、それが UTF-8 の Unicode 文字列であることが期待される場合があります。 最も一般的な形式です。 残念ながら、すべてのバイト シーケンスが有効な UTF-8 であるわけではなく、検証せずに無効な UTF-8 を受け入れるとセキュリティ リスクが発生します。

JavaScript ランタイムで UTF-8 文字列を検証するにはどうすればよいでしょうか?

valid-8 モジュールを使用することもできます。

import valid8 from "valid-8";
if(!valid8(file_content)) { console.log("not UTF-8"); }

もう 1 つの推奨されるアプローチは、TextDecoder がエラー時に例外をスローできるという事実を利用することです。

new TextDecoder("utf8", { fatal: true }).decode(file_content)

または、Node.js および Bun の一部である isUtf8 関数を使用することもできます。

import { isUtf8 } from "node:buffer";
if(!isUtf8(file_content)) { console.log("not UTF-8"); }

それらはどのように比較されますか? Linux サーバー (Intel Ice Lake) 上で Node.js 20 を使用すると、異なる言語を表す 3 つのファイルで次の速度が得られます。 Latin ファイルは単なる ASCII です。 私のベンチマークが利用可能です
アラビア語 中国語 ラテン
有効-8 0.14GB/秒 0.17GB/秒 0.50GB/秒
テキストデコーダ 0.18GB/秒 0.19GB/秒 7GB/秒
ノード:バッファ 17GB/秒 17GB/秒 44GB/秒

Node.js の現在の isUtf8 関数は次のように実装されました。 ヤギズ・ニジプリ以下の simdutf ライブラリを使用します。 UTF-8 検証アルゴリズムの功績は John Keizer にあると考えられます。

発行者

#JavaScript #で #UTF8 #文字列をどれくらい速く検証できますか #ダニエルレミアのブログ

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。