簡體   English   中英

Nodejs iconv-lite 轉換錯誤的 SHIFT JIS 字符

[英]Nodejs iconv-lite convert wrong SHIFT JIS Character

我在將UTF8日文字符轉換為SJIS時遇到問題

用於轉換的庫: iconv-lite

代碼:

const iconv = require('iconv-lite')
const japanText = 'でんぱ組 出會いの歌26 カミソヤマ ユニ';
const buffer = iconv.encode(japanText, 'Shift_JIS');
fs.writeFileSync('convertedFile.txt', buffer)

轉換后的結果:

'て?んは?組出會いの歌26 カミソヤマユニ'

有沒有人遇到同樣的問題或者有解決方法請幫幫我!

您的.js文件似乎使用NFD (Normalization Form D)保存在 UTF-8 中。 macOS 上的文本編輯器經常使用這種類型的編碼。

iconv-lite無法處理 NFD,因此您必須將japanText更改為 NFC。 有兩種解決方法:

A) 使用 NFC 保存.js文件

檢查文本編輯器的功能。 例如,如果您使用 Emacs,則可以使用ucs-normalize-NFC-region 如果您的文本編輯器沒有這樣的功能,您可以使用服務來轉換 NFC/NFD,例如: https://www.gesource.jp/weblog/?p=7635

B)在您的代碼中規范化為 NFC

在將文本傳遞給iconv-lite之前,使用normalize()方法轉換字符串,如下所示:

const fs = require('fs')
const iconv = require('iconv-lite')
const japanText = 'でんぱ組 出會いの歌26 カミソヤマ ユニ';
const buffer = iconv.encode(japanText.normalize("NFC"), 'Shift_JIS');
fs.writeFileSync('convertedFile.txt', buffer)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM