私のDBから次の文字列を取得しています:
Johan Öbert
言うべきことは:
Johan Öbert
私はそれをutf-8に変換しようとしました:
nameString.toString("utf8");
しかし、まだ同じ問題。
何か案は?
Npmの tf8 モジュールを使用して、文字列をエンコード/デコードします。
インストール:
npm install utf8
ブラウザで:
<script src="utf8.js"></script>
Node.jsの場合:
const utf8 = require('utf8');
API:
エンコード:
utf8.encode(string)
指定されたJavaScript文字列(文字列)をUTF-8としてエンコードし、文字列のUTF-8エンコードバージョンを返します。入力文字列に非スカラー値、つまり単独のサロゲートが含まれている場合、エラーがスローされます。 (非スカラー値もエンコードできるようにする必要がある場合は、代わりにWTF-8を使用してください。)
// U+00A9 COPYRIGHT SIGN; see http://codepoints.net/U+00A9
utf8.encode('\xA9');
// → '\xC2\xA9'
// U+10001 LINEAR B SYLLABLE B038 E; see http://codepoints.net/U+10001
utf8.encode('\uD800\uDC01');
// → '\xF0\x90\x80\x81'
デコード:
utf8.decode(byteString)
指定されたUTF-8エンコード文字列(byteString)をUTF-8としてデコードし、UTF-8デコードされたバージョンの文字列を返します。不正な形式のUTF-8が検出されると、エラーがスローされます。 (エンコードされた非スカラー値もデコードできるようにする必要がある場合は、代わりにWTF-8を使用してください。)
utf8.decode('\xC2\xA9');
// → '\xA9'
utf8.decode('\xF0\x90\x80\x81');
// → '\uD800\uDC01'
// → U+10001 LINEAR B SYLLABLE B038 E
私は同じ問題を抱えていました。fs.readFile()
を介してテキストファイルをロードしたとき、エンコードをUTF8に設定しようとしましたが、同じままでした。私の解決策は今これです:
myString = JSON.parse( JSON.stringify( myString ) )
この後、Öは本当にÖとして解釈されます。
エンコードを変更したい場合は、常に1つから別のものに移動します。したがって、Mac Roman
からUTF-8
に、またはASCII
からUTF-8
に移動できます。
現在のソースエンコーディングと同様に、目的の出力エンコーディングを知ることが重要です。たとえば、Mac Roman
があり、UTF-16
からUTF-8
にデコードすると、文字化けします。
エンコードの詳細については、この記事で詳しく説明します。
すべてのプログラマーがテキストを扱うためにエンコーディングと文字セットについて絶対に、積極的に知る必要があること
node-iconv または iconv-lite を使用するnpm pacakge encoding を使用すると、必要なソースおよび出力エンコーディングを簡単に指定できます。
var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');
私はjsonで同じ問題を抱えていましたが、これを使用してください:
JSON.parse(json or object)
Buffer クラスを使用することもできます:
var someEncodedString = Buffer.from('someString', 'utf-8');