Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:导入模块会改变其中字符串的编码吗?_Javascript_Node.js_Character Encoding - Fatal编程技术网

Javascript:导入模块会改变其中字符串的编码吗?

Javascript:导入模块会改变其中字符串的编码吗?,javascript,node.js,character-encoding,Javascript,Node.js,Character Encoding,我正在用Javascript(使用Node.js和Express)编写一些简单的web应用程序,我刚刚遇到了一个看起来有些奇怪的情况。嗯,我对这门语言整体来说是比较新的,所以可能这并不少见,或者我可能会犯一些基本的错误 无论如何,我刚刚意识到,在同一个模块中声明的字符串与在不同模块中声明的字符串(并通过“require”语句导入)的行为不同。例如,如果我将此代码发送到一个简单的模板('index.hbs'),该模板只呈现并显示'str'的值: app.get('/', function (req

我正在用Javascript(使用Node.js和Express)编写一些简单的web应用程序,我刚刚遇到了一个看起来有些奇怪的情况。嗯,我对这门语言整体来说是比较新的,所以可能这并不少见,或者我可能会犯一些基本的错误

无论如何,我刚刚意识到,在同一个模块中声明的字符串与在不同模块中声明的字符串(并通过“require”语句导入)的行为不同。例如,如果我将此代码发送到一个简单的模板('index.hbs'),该模板只呈现并显示'str'的值:

app.get('/', function (request, response) {
    response.render('index.hbs', {
        str: 'Français'
    });
});
浏览器以utf-8格式正确显示结果:

法国

但如果我将该字符串放在另一个模块中,例如:

其他.js

module.exports = 'Français';
并从主函数调用它:

app.get('/', function (request, response) {
    response.render('index.hbs', {
        str: require('./other.js')
    });
});
然后浏览器无法读取utf-8中的特殊字符,导致:

弗兰�人工智能

因此,如果我理解正确,在代码从一个模块导入到另一个模块的过程中,编码发生了变化。这正常吗?解决这个问题的最佳方法是什么(即,使来自其他模块的字符串保留在utf-8中)?

好的,正如用户Jonathan Lonowski所指出的,发生的情况是文件不在utf-8中,因此导入声明为文本的字符串(在本例中为other.js)在这些文件的自身编码中就是这样做的


解决此问题就像将所有代码文件的编码更改为utf-8一样简单,因此,当其他地方需要字符串(或包含字符串的对象)时,编码仍为utf-8。

确保服务器使用正确的MIME头(您可以使用浏览器开发工具进行检查)您可以使用
decodeURIComponent
console.log(require('./other'))
服务器端看到什么输出来尝试字符串?如果控制台也显示
对于
ç
,检查保存
other.js
的文件编码。Pointy:似乎字符集设置为utf-8。此外,我发现奇怪的是,如果我使用在同一模块中声明的字符串,它的工作方式与在不同模块中声明的相同字符串不同(这使得在导入过程中javascript代码本身似乎发生了一些编码更改)。Jonathan Lonowski:我在Windows上使用GitBash控制台,无论哪种方式,它都会为非ascii字符显示“?”。但我认为你是对的,其他文件可能是用非utf8编码的。我会检查一下。有一种方法可以修复JS本身的错误编码,但是修复文件要简单得多。。。