Google Apps Script / Programming

SJISからUTF8に変換(GAS)

先日、「csvが文字化けしてスプレッドシートで見れない!」と問い合わせが来ました。よくよく話を聞いてみたら、「古いシステムから吐き出されたcsvをGoogle Driveにアップロードし、中身を見たら文字化けしている。」とのことでした。ということで今回はSJISのファイルをUTF8に変換する関数のご紹介です。そもそも古いシステムを新しくした方が良いかもしれませんが、それまでの応急処置にどうぞ!

解決策

/**
* 受け取ったSJISの文字列をUTF-8の文字列に変換します。
* @param    {String} shiftJISString    SJISの文字列
* @return   {String}                   UTF-8の文字列
*/
function convertBlobsTextEncodingFromSjisToUtf8(shiftJISString) {
  return Utilities.newBlob(shiftJISString).getDataAsString();
}

こちらの関数に引数としてSJISの文字列を渡せば、UTF-8の文字列が返ってきます。

使い方

function main() {
  const fileId = createFileWithShiftJISEncoding();
  const shiftJISFile = DriveApp.getFileById(fileId);
  const shiftJISBlob = shiftJISFile.getBlob();
  console.log(shiftJISBlob.getDataAsString());
  // ����ɂ���, ���E, ���悤�Ȃ�, ���E

  const shiftJISString = shiftJISBlob.getDataAsString('Shift-JIS');
  console.log(shiftJISString);
  // こんにちは, 世界, さようなら, 世界

  const utf8String = convertBlobsTextEncodingFromSjisToUtf8(shiftJISString);
  console.log(utf8String);
  // こんにちは, 世界, さようなら, 世界
}

/**
* rootフォルダにSJISのcsvファイルを作成します。
*/
function createFileWithShiftJISEncoding() {
  const blob = Utilities
    .newBlob('', MimeType.CSV, 'CSV(SJIS)')
    .setDataFromString('こんにちは, 世界, さようなら, 世界', 'Shift-JIS');
  const newFile = DriveApp.createFile(blob);

  const csvBlob = newFile.getBlob());
  const stringData = csvBlob.getDataAsString();
  console.log(stringData);
    // ����ɂ���, ���E, ���悤�Ȃ�, ���E
  console.log(newFile.getId());
    // fileのidが表示されます。

  return newFile.getId();
}

/**
* 受け取ったSJISの文字列をUTF-8の文字列に変換します。
* @param    {String} shiftJISString    SJISの文字列
* @return   {String}                   UTF-8の文字列
*/
function convertBlobsTextEncodingFromSjisToUtf8(shiftJISString) {
  return Utilities.newBlob(shiftJISString).getDataAsString();
}

簡単解説

使われている主な関数はUtilitiesクラスのnewBlob(data)とBlobクラスのgetDataAsString()です。

  • newBlob(data)
    文字列から新たにBlobを作成する。
        ◇パラメーター
        String data: blobにする文字列(UTF-8として扱う)
  • getDataAsString()
    blobデータをUTF-8の文字列として取得する。

SJISの文字列をこの関数に渡すと、newBlob(data)でその文字列を基にデータの処理に使われるBlobを作成します。それをgetDataAsString()でUTF-8の文字列として取り出すことで、最終的にSJISからUTF-8に変換しています。

最後に

この関数の重要な部分は、SJIS→Blob→UTF-8とBlobデータに一度変換する際に文字コーディングを変えることです。こうすることで文字化けのないデータを取得できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です