求助:将Google Drive导出的UTF-8文本转Windows(CRLF)ANSI格式
解决方案:导出Windows-1252(ANSI)+CRLF格式文本
方案一:修改Google Apps Script直接导出目标格式(推荐)
从源头解决问题,调整脚本让导出文件直接匹配VB程序要求的「Windows(CRLF)|ANSI(Windows-1252)」格式:
1. 修正换行符(_getData函数)
将行分隔符从UNIX风格的\n替换为Windows标准的\r\n:
function _getData( sheet ){ var numRows = sheet.getDataRange().getNumRows(); var data; var txt = ""; try { data = sheet.getDataRange().offset( 1, 0, numRows - 1).getDisplayValues(); // 替换换行符为Windows CRLF格式 txt = data.map(function (col) {return col.join('\t');}).join('\r\n'); }catch( err) { Logger.log(err); Browser.msgBox('Erreur : ' + err); } finally{ return txt; } }
2. 指定Windows-1252编码(createDatFile函数)
核心是创建Blob时明确指定编码为Windows-1252,同时补全原有TODO的文件覆盖逻辑:
function createDatFile( extractName, data ){ var blob; var directory; var fileName = extractName + ".DAT"; var file; try{ directory = DriveApp.getFolderById(''); // 填入你的共享目录ID // 创建指定编码的Blob blob = Utilities.newBlob('', MimeType.PLAIN_TEXT, fileName) .setDataFromString(data, "Windows-1252"); // 删除已存在的同名文件 var existingFiles = directory.getFilesByName(fileName); while(existingFiles.hasNext()){ existingFiles.next().setTrashed(true); } // 直接用Blob创建文件,避免转码丢失 file = directory.createFile(blob); return file; }catch(err){ Logger.log("Erreur : " + err); Browser.msgBox("Erreur : " + err) } }
3. 主函数无需修改
原exportToTextFile函数保持原样即可,修改后导出的文件会直接满足VB程序的格式要求。
方案二:本地转换(Bash/PowerShell)
如果无法调整GAS脚本,可在本地完成编码和换行符转换:
PowerShell 正确命令
之前Set-Content无效是因为未处理换行符,使用以下命令同时转换编码和换行格式:
# 读取UTF-8文件,转换为Windows-1252,同时将LF转为CRLF Get-Content "C:\Input\file.txt" -Encoding UTF8 | Out-File "C:\Output\file.txt" -Encoding Default -NewLine "`r`n"
注:PowerShell中的Default编码对应系统默认ANSI编码(西语系系统为Windows-1252)。
Bash(Git Bash/WSL)方案
使用iconv转换编码,unix2dos转换换行符:
# 先转编码为Windows-1252,再转换换行符为CRLF iconv -f UTF-8 -t WINDOWS-1252 input.txt > temp.txt unix2dos temp.txt mv temp.txt output.dat
内容的提问来源于stack exchange,提问作者BigBenne
相关产品推荐
相关产品推荐

