在 NodeJS 中将字符串从 utf8 转换为 latin1

Converting a string from utf8 to latin1 in NodeJS

我使用的是 Latin1 编码的数据库,无法将其更改为 UTF-8,这意味着我 运行 遇到了某些应用程序数据的问题。我正在使用 Tesseract 对文档进行 OCR(tesseract 在 UTF-8 中编码)并尝试使用 iconv-lite;但是,它会创建一个缓冲区并将该缓冲区转换为字符串。但同样,缓冲区到字符串的转换不允许 "latin1" 编码。

我读了一堆questions/answers;然而,我得到的只是设置客户端编码和类似的东西。

有什么想法吗?

您可以从现有的 UFT8 字符串创建一个缓冲区,然后使用 iconv-lite 将该缓冲区解码为 Latin 1,就像这样

var buff   = new Buffer(tesseract_string, 'utf8');
var DB_str = iconv.decode(buff, 'ISO-8859-1');

我找到了一种将任何编码文本文件转换为 UTF8 的方法

var 
  fs = require('fs'),
  charsetDetector = require('node-icu-charset-detector'),
  iconvlite = require('iconv-lite');

/* Having different encodings
 * on text files in a git repo
 * but need to serve always on 
 * standard 'utf-8'
 */
function getFileContentsInUTF8(file_path) {
  var content = fs.readFileSync(file_path);
  var original_charset = charsetDetector.detectCharset(content);
  var jsString = iconvlite.decode(content, original_charset.toString());
  return jsString;
}

我在这里也有一个要点:https://gist.github.com/jacargentina/be454c13fa19003cf9f48175e82304d5

也许你可以试试这个,其中 content 应该是你的 数据库缓冲区数据 (在 latin1 编码中)

从 Node.js v7.1.0 开始,您可以使用 buffer 模块中的 transcode 函数:
https://nodejs.org/api/buffer.html#buffer_buffer_transcode_source_fromenc_toenc

例如:

const buffer = require('buffer');
const latin1Buffer = buffer.transcode(Buffer.from(utf8String), "utf8", "latin1");
const latin1String = latin1Buffer.toString("latin1");