aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/api/domstring/binary/index.html
blob: 29ecfa3a286c6fb2385a2f7979af3903b2f86110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
---
title: バイナリー文字列
slug: Web/API/DOMString/Binary
tags:
  - DOM
  - JavaScript
  - JavaScript typed arrays
  - JavaScript 型付き配列
  - Reference
  - String
translation_of: Web/API/DOMString/Binary
---
<p>{{jsxref("String", "JavaScript の文字列")}} は、UTF-16 でエンコードされた文字列です。つまり、コードの最小単位はメモリー上に 2 バイトを必要とし、<code>65535</code> 通りのコードポイントを表現できます。この文字列のある部分集合として、ASCII 文字 (つまりコードポイントが <code>127</code> を超えない文字) だけを含む UTF-16 文字列というものが考えられます。例えば、文字列 <code>"Hello world!"</code> は、この ASCII 部分集合に含まれますが、文字列 <code>"ÀÈÌÒÙ"</code> はそうではありません。<strong>バイナリー文字列</strong>とは、この ASCII 部分集合と似た概念ですが、コードポイントを <code>127</code> までではなく、<code>255</code> まで許可するものです。しかし、その目的は文字列を表現することではなく、バイナリーデータを表現することです。この方法で表現されるデータの大きさは、バイナリーのままに比べて 2 倍になりますが、JavaScript の文字列の長さは 2 バイトを一つの単位として計算されるため、その大きさがユーザーの目に触れることはありません。</p>

<p>バイナリー文字列は、JavaScript の言語設計には含まれていません。しかし、バイナリー文字列を入力として受け取るネイティブ関数が少なくとも一つあり、それは {{domxref("WindowBase64.btoa","btoa()")}} です。コードポイントが <code>255</code> を超える文字列を使ってこの関数を実行すると、<code>Character Out Of Range</code> エラーが発生します。</p>

<p><code>uint8</code> の数値の代わりに UTF-16 のコード単位を使うようになった理由は、ウェブアプリケーションがどんどん強力になっていくにつれて (音声や映像の処理や、WebSockets を使った生データへのアクセスなどができるようになりました)、JavaScript コードが生のバイナリーデータを迅速かつ容易に処理できれば便利である場面があることが明らかになったからです。</p>

<p>かつては、バイナリーデータを扱うには、データを<a href="/ja/docs/JavaScript/Reference/Global_Objects/String">文字列</a>として扱い、<code><a href="/ja/docs/JavaScript/Reference/Global_Objects/String/charCodeAt">charCodeAt()</a></code> メソッドを使ってデータバッファー (つまりバイナリー文字列) からバイトを読むといった、模擬的な方法によらざるを得ませんでした。しかしこの方法は遅く、複数回の変換が必要になるため、エラーも起こしやすいものでした (特にバイナリーデータの構造が実際にはバイト単位ではなく、例えば 32 ビットの整数や実数である場合)。</p>

<p><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript 型付き配列</a> を使えば、より効率的に生のバイナリーデータを処理することができます。また、<a href="/ja/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code></a> <span class="inlineIndicator" title="この API はネイティブではありません">非ネイティブ</span> コンストラクターは、型付き配列の 1 レベル上であり、<a class="external" href="https://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E">C言語</a> に似た文字列用のインターフェイスを提供します。</p>

<h2 id="See_also" name="See_also">関連情報</h2>

<ul>
 <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript 型付き配列</a></li>
 <li><a href="/ja/docs/Web/API/DOMString"><code>DOMString</code></a></li>
 <li><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/String">String</a></li>
 <li><a href="/ja/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code></a></li>
</ul>