Skip to content

Commit

Permalink
docs(readme): add example code using the fetch API
Browse files Browse the repository at this point in the history
- update example code for File APIs
- remove `$` prefix from `npm install` commands
- add notes about `type: arraybuffer` option in Encoding.convert
  • Loading branch information
polygonplanet committed Mar 3, 2024
1 parent 268ef11 commit 146e341
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 42 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,8 @@ Also, the following options such as `type`, `fallback`, and `bom` need to be spe
```javascript
var utf8Array = [227, 129, 130];
var sjisArray = Encoding.convert(utf8Array, {
to: 'SJIS', // to_encoding
from: 'UTF8' // from_encoding
to: 'SJIS',
from: 'UTF8'
});
```

Expand All @@ -306,7 +306,7 @@ console.log(unicodeString); // 'おはよ'
The following `type` options are supported.

* **string** : Return as a string.
* **arraybuffer** : Return as an ArrayBuffer (`Uint16Array`).
* **arraybuffer** : Return as an ArrayBuffer (Actually returns a `Uint16Array` due to historical reasons).
* **array** : Return as an Array. (*default*)

#### Replace to HTML entity (Numeric character reference) when cannot be represented
Expand Down Expand Up @@ -462,7 +462,7 @@ console.log(decoded); // [130, 177, 130, 241, 130, 201, 130, 191, 130, 205]

## Other examples

### Example using the `fetch API` and Typed Arrays (Uint8Array)
### Example using the `Fetch API` and Typed Arrays (Uint8Array)

This example reads a text file encoded in Shift_JIS as binary data,
and displays it as a string after converting it to Unicode using [Encoding.convert](#convert-character-encoding-convert).
Expand Down
111 changes: 73 additions & 38 deletions README_ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ JavaScript で文字コードの変換や判定をします。
* [配列から文字列の相互変換 (codeToString/stringToCode)](#配列から文字列の相互変換-codetostringstringtocode)
* [全角・半角変換](#全角半角変換)
- [その他の例](#その他の例)
* [XMLHttpRequest と Typed arrays (Uint8Array) を使用した例](#xmlhttprequest-と-typed-arrays-uint8array-を使用した例)
* [`Fetch API` と Typed Arrays (Uint8Array) を使用した例](#fetch-api-と-typed-arrays-uint8array-を使用した例)
* [File API を使用したファイルの文字コード判定・変換例](#file-api-を使用したファイルの文字コード判定変換例)
- [Contributing](#contributing)
- [License](#license)
Expand Down Expand Up @@ -63,7 +63,7 @@ JavaScript の文字列は内部で UTF-16 コードユニットとして符号
npm では `encoding-japanese` というパッケージ名で公開されています。

```bash
$ npm install --save encoding-japanese
npm install --save encoding-japanese
```

#### `import` で読み込む
Expand All @@ -83,19 +83,19 @@ const Encoding = require('encoding-japanese');
encoding.js の TypeScript 型定義は [@types/encoding-japanese](https://www.npmjs.com/package/@types/encoding-japanese) から利用できます ([@rhysd](https://github.com/rhysd) さんありがとうございます)。

```bash
$ npm install --save-dev @types/encoding-japanese
npm install --save-dev @types/encoding-japanese
```

### ブラウザ

npm からインストール、または[リリース一覧](https://github.com/polygonplanet/encoding.js/tags)からダウンロードしたパッケージ内の `encoding.js` をご使用ください。
`git clone` した場合は、masterブランチであっても開発中の状態の可能性がありますのでご注意ください
npm経由でインストールするか、または[リリース一覧](https://github.com/polygonplanet/encoding.js/tags)からダウンロードしたパッケージ内の `encoding.js` をご使用ください。
`git clone` した場合は、*master* (または *main*) ブランチであっても開発中の状態の可能性がありますのでご注意ください。

```html
<script src="encoding.js"></script>
```

または minify された `encoding.min.js` を使用します
minify された `encoding.min.js` も使用できます

```html
<script src="encoding.min.js"></script>
Expand Down Expand Up @@ -273,8 +273,8 @@ sjisArray = Encoding.convert(utf8Array, 'SJIS', 'AUTO');
```javascript
var utf8Array = [227, 129, 130];
var sjisArray = Encoding.convert(utf8Array, {
to: 'SJIS', // to_encoding
from: 'UTF8' // from_encoding
to: 'SJIS',
from: 'UTF8'
});
```

Expand All @@ -296,9 +296,12 @@ console.log(unicodeString); // 'おはよ'
以下の `type` オプションが指定できます。

* **string** : 文字列として返ります。
* **arraybuffer** : ArrayBuffer (`Uint16Array`) として返ります
* **arraybuffer** : ArrayBuffer として (歴史的な理由で実際には `Uint16Array` が) 返ります
* **array** : 配列として返ります。 (デフォルト)

`type: 'string'` は、配列から文字列に変換する [Encoding.codeToString](#配列から文字列の相互変換-codetostringstringtocode) のショートハンドとして使用することができます。
`UNICODE` への変換以外は `type: 'string'` を指定しても正しく扱えない可能性がありますのでご注意ください

#### 変換できない文字を HTML エンティティ (HTML 数値文字参照) に置き換える

変換先の文字コードで表現できない文字はデフォルトで「?」 (U+003F) に置き換えられますが、`fallback` オプションを指定すると HTML エンティティに置き換えることができます。
Expand Down Expand Up @@ -457,69 +460,100 @@ console.log(decoded); // [130, 177, 130, 241, 130, 201, 130, 191, 130, 205]

## その他の例

### XMLHttpRequest と Typed arrays (Uint8Array) を使用した例
### `Fetch API` と Typed Arrays (Uint8Array) を使用した例

この例では Shift_JIS で書かれたテキストファイルをバイナリデータとして読み込み、
[Encoding.convert](#convert-character-encoding-convert) によって `UNICODE` に変換して表示します。

```javascript
(async () => {
try {
const response = await fetch('shift_jis.txt');
const buffer = await response.arrayBuffer();

// ファイルから読み込んだSJISの文字コード配列
const sjisArray = new Uint8Array(buffer);

// SJISからUNICODE(JavaScriptコードユニット)に文字コードを変換
const unicodeArray = Encoding.convert(sjisArray, {
to: 'UNICODE',
from: 'SJIS'
});

// 表示用に文字コード配列を文字列に変換
const unicodeString = Encoding.codeToString(unicodeArray);
console.log(unicodeString);
} catch (error) {
console.error('Error loading the file:', error);
}
})();
```

このサンプルでは Shift_JIS で書かれたテキストファイルをバイナリデータとして読み込み、Encoding.convert によって `UNICODE` に変換して表示します。
<details>
<summary>この例の XMLHttpRequest を使ったバージョン</summary>

```javascript
var req = new XMLHttpRequest();
req.open('GET', '/my-shift_jis.txt', true);
const req = new XMLHttpRequest();
req.open('GET', 'shift_jis.txt', true);
req.responseType = 'arraybuffer';

req.onload = function (event) {
var buffer = req.response;
req.onload = (event) => {
const buffer = req.response;
if (buffer) {
// Shift_JIS Array
var sjisArray = new Uint8Array(buffer);
// ファイルから読み込んだSJISの文字コード配列
const sjisArray = new Uint8Array(buffer);

// Convert encoding to UNICODE (JavaScript Unicode Array).
var unicodeArray = Encoding.convert(sjisArray, {
// SJISからUNICODE(JavaScriptコードユニット)に文字コードを変換
const unicodeArray = Encoding.convert(sjisArray, {
to: 'UNICODE',
from: 'SJIS'
});

// Join to string.
var unicodeString = Encoding.codeToString(unicodeArray);
// 表示用に文字コード配列を文字列に変換
const unicodeString = Encoding.codeToString(unicodeArray);
console.log(unicodeString);
}
};

req.send(null);
```
</details>

### File API を使用したファイルの文字コード判定・変換例

File API を使用してファイルを読み込みます。
その際にファイルの文字コードを判定し、正しく表示されるよう `UNICODE` に変換して表示します。
この例では、File API を使って選択されたファイルの内容を読み込みます。その際にファイルの文字コードを判定し、
`Shift_JIS``EUC-JP` などで書かれたファイルも文字化けなく表示されるように `UNICODE` に変換して表示します。

```html
<input type="file" id="file">
<div id="encoding"></div>
<textarea id="result" rows="5" cols="80"></textarea>
<textarea id="content" rows="5" cols="80"></textarea>

<script>
function onFileSelect(event) {
var file = event.target.files[0];
const file = event.target.files[0];
var reader = new FileReader();
const reader = new FileReader();
reader.onload = function(e) {
var codes = new Uint8Array(e.target.result);
var encoding = Encoding.detect(codes);
document.getElementById('encoding').textContent = encoding;
// Convert encoding to unicode
var unicodeString = Encoding.convert(codes, {
to: 'unicode',
from: encoding,
const codes = new Uint8Array(e.target.result);
const detectedEncoding = Encoding.detect(codes);
const encoding = document.getElementById('encoding');
encoding.textContent = `Detected encoding: ${detectedEncoding}`;
// UNICODE(JavaScriptコードユニット)に文字コードを変換
const unicodeString = Encoding.convert(codes, {
to: 'UNICODE',
from: detectedEncoding,
type: 'string'
});
document.getElementById('result').value = unicodeString;
document.getElementById('content').value = unicodeString;
};
reader.readAsArrayBuffer(file);
}
document.getElementById('file').addEventListener('change', onFileSelect, false);
document.getElementById('file').addEventListener('change', onFileSelect);
</script>
```

Expand All @@ -532,8 +566,9 @@ Pull requests や Issues を歓迎しています。

### Pull requests

Pull requests をする前に、 `$ npm run test` を実行してエラーがないことをご確認ください。
Pull requests をする前に、 `npm run test` を実行してエラーがないことをご確認ください。

## License

MIT
このプロジェクトは MIT ライセンスです。
詳しくは [LICENSE](LICENSE) ファイルを参照してください。

0 comments on commit 146e341

Please sign in to comment.