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データに一度変換する際に文字コーディングを変えることです。こうすることで文字化けのないデータを取得できます。
コメントを残す