问题描述
直接从Google Cloud Storage中读取文本文件时,来自Buffer的奇怪字符
我一直在尝试各种编码并通过express.js发送标头,但我无法弄清楚。我的问题是,总是有一些字符是带有问号的正方形。如果我下载文件,看起来不错。当我尝试直接读取文件时,它运行不正常,并显示方形字符。我相信缓冲区中出了点问题。有没有人有过直接从Google Cloud Storage中读取非英语文本文件的经验?
dependencies {
implementation ('org.springframework.boot:spring-boot-starter-web') {
exclude group : 'org.apache.tomcat.embed',module : 'tomcat-embed-websocket'
}
implementation("org.springframework.boot:spring-boot-starter-actuator")
// Lombok
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
testCompileOnly("org.projectlombok:lombok")
testAnnotationProcessor("org.projectlombok:lombok")
// https://mvnrepository.com/artifact/org.slf4j/jcl-over-slf4j
implementation('org.slf4j:jcl-over-slf4j:2.0.0-alpha1')
implementation('org.springdoc:springdoc-openapi-webmvc-core:1.4.4')
}
解决方法
我碰巧有幸在发布问题后很快找到答案。
不确定是什么引起了问题,但是我最终使用了string_decoder。我认为文件中存在UTF8的其他版本(不确定),但这就是为什么我不得不(再次)将其解码为utf8的原因。
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
所以会是这样。
console.log('Concat Data');
var buf = '';
var decoder = new StringDecoder('utf8');
archivo.on('data',function (d) {
buf += decoder.write(d);
}).on('end',function () {
console.log("End");
console.log(buf)
res.json(buf);
}).on('error',function (e) {
res.json(e)
});