web-dev-qa-db-ja.com

Nodejsは文字列をUTF-8に変換します

私のDBから次の文字列を取得しています:

Johan Öbert

言うべきことは:

Johan Öbert

私はそれをutf-8に変換しようとしました:

nameString.toString("utf8");

しかし、まだ同じ問題。

何か案は?

30
Alosyius

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

リソース

29
Jayram

私は同じ問題を抱えていました。fs.readFile()を介してテキストファイルをロードしたとき、エンコードをUTF8に設定しようとしましたが、同じままでした。私の解決策は今これです:

myString = JSON.parse( JSON.stringify( myString ) )

この後、Öは本当にÖとして解釈されます。

14
Tobias Nickel

エンコードを変更したい場合は、常に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');
6
paaat

私はjsonで同じ問題を抱えていましたが、これを使用してください:

JSON.parse(json or object)
0

Buffer クラスを使用することもできます:

var someEncodedString = Buffer.from('someString', 'utf-8');
0
Caleb Goodman