質問編集履歴

2 追記

tkshp

tkshp score 150

2018/10/29 19:03  投稿

requestメソッドで、数値文字参照が返ってきた場合の処理。
### 前提・実現したいこと
requestメソッドで返ってきた文字列を
var jschardet = require('jschardet');
var jconv = require( 'jconv' )
でエンコード変換しているのですが、
このとき、エンコードの種類がわからない場合、エラーを吐き、該当のコードのcatchに捕まります。
catchに捕まる際、返ってきたものが、数値文字参照の場合があります。
このとき、返ってきたものが、数値文字参照だったら、それを文字にする変換をかけて、それ以外の理由でcatchしていたら、
何もしないという処理にしたいのですが、
それには、おそらく、catchで捕まっているものが数値文字参照かどうかを調べればよいと思うのですが、
それを調べる方法ってありますか?
もしくは、他に何かよい方法があればご教示いただきたいです。
catchに捕まるものを必ず数値文字参照の変換をかけるというのは、やり方としてよくない
(catchに捕まったものが数値文字参照以外だったらよくないはず)と思ったので、
このような質問をさせていただきました。
ちなみに、例えば、下記Googleにrequestを投げると、数値文字参照が返ってきます。
https://www.google.com/
もちろん、Googleのみ対応という汎用的でないコードにするつもりはありません。
### 該当のソースコード
```node
   request(options, function (err, res, data) {
       if (err) {
       } else {
           try{
               var detectResult = jschardet.detect(data);
               if(!(detectResult.encoding=="UTF-8")){
                   data = jconv.convert(data, detectResult.encoding, "UTF-8" );
               }
           }catch(e){
             //ここで、dataが数値文字参照の文字列なのかどうか知りたい。
           }
           data = data.toString();
       }
```
エンコードの種類がわからないときに吐くエラーは下記です。
catchのeの出力内容。
```
[Error: Encoding not recognized.]
```
```
Googleにrequestして取得した文字は下記です。
Googleに限らず、全てのサイトにおいて、取得される文字が数値文字参照かどうか知りたいです。
```
世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探しの情報を見つけてください。
```
  • Node.js

    3918 questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

1 エラー追記。

tkshp

tkshp score 150

2018/10/29 18:17  投稿

requestメソッドで、数値文字参照が返ってきた場合の処理。
### 前提・実現したいこと
requestメソッドで返ってきた文字列を
var jschardet = require('jschardet');
var jconv = require( 'jconv' )
でエンコード変換しているのですが、
このとき、エンコードの種類がわからない場合、エラーを吐き、該当のコードのcatchに捕まります。
catchに捕まる際、返ってきたものが、数値文字参照の場合があります。
このとき、返ってきたものが、数値文字参照だったら、それを文字にする変換をかけて、それ以外の理由でcatchしていたら、
何もしないという処理にしたいのですが、
それには、おそらく、catchで捕まっているものが数値文字参照かどうかを調べればよいと思うのですが、
それを調べる方法ってありますか?
もしくは、他に何かよい方法があればご教示いただきたいです。
catchに捕まるものを必ず数値文字参照の変換をかけるというのは、やり方としてよくない
(catchに捕まったものが数値文字参照以外だったらよくないはず)と思ったので、
このような質問をさせていただきました。
ちなみに、例えば、下記Googleにrequestを投げると、数値文字参照が返ってきます。
https://www.google.com/
もちろん、Googleのみ対応という汎用的でないコードにするつもりはありません。
### 該当のソースコード
```node
   request(options, function (err, res, data) {
       if (err) {
       } else {
           try{
               var detectResult = jschardet.detect(data);
               if(!(detectResult.encoding=="UTF-8")){
                   data = jconv.convert(data, detectResult.encoding, "UTF-8" );
               }
           }catch(e){
             //ここで、dataが数値文字参照の文字列なのかどうか知りたい。
           }
           data = data.toString();
       }
```
```
エンコードの種類がわからないときに吐くエラーは下記です。
catchのeの出力内容。
```
[Error: Encoding not recognized.]
```
  • Node.js

    3918 questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る