文字コード判別

in #side7javascript3 years ago (edited)

下記ライブラリでできる。
lwcで使ってみて他の処理もあるので確定ではないけど
レコード数が1000件超えるとあやしいかもしれない

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Encoding.jsでファイルを指定して文字コード変換・検出するデモ</title>
<style>
body {
font-family: tahoma, "Helvetica Neue", Helvetica, sans-serif;
margin: 1em;
}

h1 {
  margin: 1em 1em 2em 3em;
}

#file {
  margin-bottom: 1em;
}

#detected-encoding {
  font-weight: bold;
}

textarea {
  width: 98%;
  height: 120px;
  font-family: consolas, monospace;
}

footer {
  margin-top: 1em;
  font-weight: bold;
}

</style>
</head>
<body>
<h1><a href="https://github.com/polygonplanet/encoding.js">Encoding.js</a>でファイルを指定して文字コード変換・検出するデモ</h1>
<p>
テキストファイルを読み込んで文字コード変換して表示します。
<br>
通常、ブラウザで Shift_JIS や EUC-JP で書かれたファイルを読み込むと文字化けしますが、 encoding.js で文字コードを変換して文字化けしないようにします。
</p>
<p>
適当なファイルを選択してみてください。
</p>

<input type="file" id="file">

<div id="detected-encoding"></div>

<fieldset>
<legend>ファイル内容そのまま表示:</legend>
<div>
<textarea id="raw-result" rows="5" cols="80"></textarea>
</div>
</fieldset>

<fieldset>
<legend>encoding.js で文字コードを変換して表示:</legend>
<div>
<textarea id="result" rows="5" cols="80"></textarea>
</div>
</fieldset>

<script src="https://cdnjs.cloudflare.com/ajax/libs/encoding-japanese/1.0.29/encoding.min.js"></script>
<script>
function onFileSelect(event) {
var file = event.target.files[0];

var reader = new FileReader();
reader.onload = function(e) {
  var codes = new Uint8Array(e.target.result);
  console.log(e.target.result);
  console.log(codes);
  var detectedEncoding = Encoding.detect(codes);

  document.getElementById(&#039;detected-encoding&#039;).textContent = &#039;ファイルから検出した文字コード: &#039; + detectedEncoding;

  try {
    var rawResult = String.fromCharCode.apply(null, codes);

    var unicodeString = Encoding.convert(codes, { to: &#039;unicode&#039;, from: detectedEncoding, type: &#039;string&#039;});

    document.getElementById(&#039;raw-result&#039;).value = rawResult;
    document.getElementById(&#039;result&#039;).value = unicodeString;
  } catch (e) {
    // Uncaught RangeError: Maximum call stack size exceeded
    alert(&#039;ファイルサイズが大きすぎます&#039;);
  }
};

reader.readAsArrayBuffer(file);

}

document.getElementById('file').addEventListener('change', onFileSelect, false);
</script>

<footer>
<a href="https://github.com/polygonplanet/encoding.js">Repository in GitHub</a>
</footer>

<a href="https://github.com/polygonplanet/encoding.js"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/121cd7cbdc3e4855075ea8b558508b91ac463ac2/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f677265656e5f3030373230302e706e67" alt="Fork me on GitHub" data-canonical-src=""></a>
</body>
</html>

preタグとか使えるようにならんもんなんかね。。
面倒だ。

Coin Marketplace

STEEM 0.18
TRX 0.13
JST 0.029
BTC 58271.24
ETH 3134.28
USDT 1.00
SBD 2.22