バイト数

提供: MeryWiki
移動先: 案内検索

編集中の文書のバイト数をステータスバーに表示します。半角文字は1バイト、全角文字は2バイトとして計算します。

// -----------------------------------------------------------------------------
// バイト数
//
// Copyright (c) Kuro. All Rights Reserved.
// www:    http://www.haijin-boys.com/
// -----------------------------------------------------------------------------
 
with (document) {
  var s = document.selection.Text;
  if (s == "")
    s = Text;
  var j = 0;
  var l = s.length;
  for (var i = 0; i < l; i++) {
    var c = s.charCodeAt(i);
    if ((c >= 0x0 && c < 0x81) || (c == 0xf8f0) ||
      (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4))
      j += 1;
    else
      j += 2;
  }
  window.status = ("" + j).match(/./g).reverse().join("")
    .replace(/(\d{3})/g, "$1,").match(/./g)
    .reverse().join("").replace(/^,/, "") + " バイト";
}




文字コードを指定,または取得してバイト数を計算します.

オプション

encoding 文字コード指定.
空の場合はそのドキュメントの文字モード.
sjis のように直接指定すれば常にその文字コードで計算.
CRLF 改行コードの指定.
CR + LF の場合は true.
CR または LF の場合は false.
BOM BOM コード分を加算するかの指定.
BOM 分を加算するときは true.(保存したファイルのサイズと一致します)
BOM 分を加算しない場合は false.
var encoding = "";  // 指定時はその文字コード.
var CRLF = true;    // 改行コードが CRLF なら true.そうでないなら false.
var BOM = true;     // BOM を考慮する場合は true.考慮しない場合は false.
 
var charset = "";
var s = Document.Selection.IsEmpty ? Document.Text : Document.Selection.Text;
s = CRLF ? s.replace(/\r?\n/g, "\r\n") : s;
if (!encoding) {
  switch (Document.Encoding){
    case meEncodingUTF16LE:
    case meEncodingUTF16BE:               WriteBytes(s.length * 2 + (BOM?2:0)); Quit();
    case meEncodingUTF8WithSignature:
    case meEncodingUTF8WithoutSignature:  charset = "utf-8";        break;
    case meEncodingUTF7:                  charset = "utf-7";        break;
    case meEncodingEUC:                   charset = "euc-jp";       break;
    case meEncodingJIS:                   charset = "iso-2022-jp";  break;
    case meEncodingShiftJIS:              charset = "sjis";         break;
  }
} else {
  charset = encoding;
}
 
var adodb = new ActiveXObject('ADODB.Stream');
adodb.Type = 2;
adodb.Charset = charset;
adodb.Open();
adodb.WriteText(s);
var bytes = adodb.Position;
adodb.Close();
 
if (!encoding && (Document.Encoding == meEncodingUTF8WithoutSignature || (!BOM && Document.Encoding == meEncodingUTF8WithSignature))) {
  bytes -= 3;
}
WriteBytes(bytes);
function WriteBytes(bytes){
  Status = String(bytes).split("").reverse().join("").replace(/(\d{3})/g, "$1,").split("").reverse().join("").replace(/^,/, "");
}