ホームページ > ウェブフロントエンド > フロントエンドQ&A > Nodejs の中国語パスが文字化けする

Nodejs の中国語パスが文字化けする

WBOY
リリース: 2023-05-28 15:03:09
オリジナル
1554 人が閲覧しました

Node.js は、JavaScript で書かれたオープンソースのクロスプラットフォーム バックエンド ソリューションです。これはサーバー側での JavaScript アプリケーションの構築をサポートしており、おそらく今日のバックエンド開発で最も人気のあるソリューションの 1 つです。ただし、Node.js を使用する場合、中国語のパスを処理すると文字化けが発生することがよくあります。この記事では、この問題を解決する方法について説明します。

1. 問題の説明

Node.js を使用して中国語のパスを処理する場合、ファイル名またはディレクトリが文字化けする可能性があります (例:

Error: ENOENT: no such file or directory, scandir 'C:Users妲己Desktop    est'
ログイン後にコピー

、または fs を使用する場合)。 readdir () メソッドがディレクトリを読み取ると、次の結果が得られます。

[ 'C:\Users\琪亚娜\Desktop\test\文件夹1', 'C:\Users\琪亚娜\Desktop\test\文件夹2', 'C:\Users\琪亚娜\Desktop\test\文件夹3' ]
ログイン後にコピー

ファイル名またはディレクトリ名の漢字が文字化けに変換され、非常に混乱していることがわかります。

2. 原因分析

文字化けは通常、文字エンコーディングの不一致が原因で発生します。 Windows システムでは、通常、中国語の文字は gbk エンコーディングを使用しますが、Node.js はパスを処理するときにデフォルトで utf-8 エンコーディングを使用するため、ファイル名またはディレクトリ名の中国語の文字が正しく解析されません。

3. 解決策

1. iconv-lite ライブラリを使用する

iconv-lite は非常に人気のある文字エンコーディング変換ライブラリであり、中国語のパスの文字化けコードを解決するために使用できます。問題。

まず、npm を使用して iconv-lite をインストールする必要があります:

npm install iconv-lite --save
ログイン後にコピー

次に、fs モジュールを使用してファイルの読み取りまたは書き込みを行うときに、ファイル パスが iconv-lite を通じてエンコードされ、変換されます。ライトモジュール。例:

const iconv = require('iconv-lite');
const fs = require('fs');

let path = 'C:\Users\妲己\Desktop\test';

// 将路径从gbk编码转换为utf-8编码
path = iconv.decode(Buffer.from(path), 'gbk');

// 读取文件
fs.readFileSync(path);
ログイン後にコピー

2.node-chardet ライブラリを使用する

node-chardet は、一般的に使用されるもう 1 つの文字エンコーディング検出ライブラリであり、中国語のパスを処理するときにも使用できます。

まず、npm を使用して、node-chardet をインストールする必要があります:

npm install chardet --save
ログイン後にコピー

次に、fs モジュールを使用してファイルの読み取りまたは書き込みを行うときに、node-chardet を介してファイル パスのエンコーディングを検出します。 chardet モジュールを開くと、utf-8 エンコーディングに変換されます。例:

const chardet = require('chardet');
const fs = require('fs');

let path = 'C:\Users\妲己\Desktop\test';

// 检测路径编码
const encoding = chardet.detectFileSync(path);

// 将路径从检测出的编码转换为utf-8编码
path = iconv.decode(Buffer.from(path), encoding, 'utf-8');

// 读取文件
fs.readFileSync(path);
ログイン後にコピー

3. StringDecoder の使用

Node.js には、Buffer オブジェクト内のバイトを文字にデコードできる StringDecoder クラスが組み込まれています。このクラスを使用すると、中国語のパスが文字化けする問題を解決できます。

例:

const { StringDecoder } = require('string_decoder');
const fs = require('fs');

let path = 'C:\Users\妲己\Desktop\test';

// 读取文件
const content = fs.readFileSync(Buffer.from(path));

// 将Buffer对象转换为字符
const decoder = new StringDecoder();
const pathStr = decoder.write(content);
ログイン後にコピー

4. Windows システムのエンコード設定を変更する

Windows システムでは、通常、デフォルトで gbk エンコードが使用されます。エンコード設定。utf-8 でエンコードされます。具体的な方法は次のとおりです。

「コントロール パネル」->「時計と地域」->「地域」->「管理」->「システムの地域設定の変更」を開き、「言語」を選択します。 「非 Unicode プログラム」を「中国語 (簡体字、中国)」に設定し、コンピューターを再起動します。

5. 概要

この記事では、Node.js を使用して中国語のパスを処理するときに発生する可能性のある文字化けの問題と、iconv-lite ライブラリ、node-chardet ライブラリ、StringDecoder の使用方法を紹介します。クラスまたは変更 この問題を解決するには、Windows システムのエンコード設定が使用されます。実際の開発では、特定の状況に応じてさまざまなソリューションを採用できるため、Node.js は中国語のパスをスムーズに処理でき、アプリケーション開発により良いエクスペリエンスを提供できます。

以上がNodejs の中国語パスが文字化けするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート