Javascript: 导入模块会改变其中字符串的编码吗?
Javascript: does importing a module change the encoding of strings in it?
我正在使用 Javascript(使用 Node.js 和 Express)做一些简单的 Web 应用程序,我刚刚遇到了一个看起来有点奇怪的情况。好吧,我对这门语言总体上还是比较陌生的,所以也许这并不少见,或者我可能犯了一些基本错误。
无论如何,我刚刚意识到在同一模块中声明的字符串与在不同模块中声明的字符串(并通过 "require" 语句导入)的行为不同。例如,如果我将这段代码发送到一个简单的模板 ('index.hbs'),它只呈现和显示 'str':
的值
app.get('/', function (request, response) {
response.render('index.hbs', {
str: 'Français'
});
});
浏览器在utf-8中正确显示结果:
Français
但是如果我将该字符串放在另一个模块中,例如:
other.js
module.exports = 'Français';
并从主函数中调用它:
app.get('/', function (request, response) {
response.render('index.hbs', {
str: require('./other.js')
});
});
然后浏览器无法读取utf-8中的特殊字符导致:
Fran�ais
因此,如果我的理解正确的话,编码会在从一个模块导入到另一个模块的过程中发生变化。这是正常的吗?解决该问题的最佳方法是什么(即使来自其他模块的字符串保留在 utf-8 中)?
好的,正如用户 Jonathan Lonowski 指出的那样,发生的事情是文件不是 utf-8,因此导入声明为其中文字的字符串(在例如,other.js) 在这些文件自己的编码中这样做。
解决问题就像将所有代码文件的编码更改为utf-8一样简单,因此当其他地方需要字符串(或包含字符串的对象)时,编码仍然是utf-8。
我正在使用 Javascript(使用 Node.js 和 Express)做一些简单的 Web 应用程序,我刚刚遇到了一个看起来有点奇怪的情况。好吧,我对这门语言总体上还是比较陌生的,所以也许这并不少见,或者我可能犯了一些基本错误。
无论如何,我刚刚意识到在同一模块中声明的字符串与在不同模块中声明的字符串(并通过 "require" 语句导入)的行为不同。例如,如果我将这段代码发送到一个简单的模板 ('index.hbs'),它只呈现和显示 'str':
的值app.get('/', function (request, response) {
response.render('index.hbs', {
str: 'Français'
});
});
浏览器在utf-8中正确显示结果:
Français
但是如果我将该字符串放在另一个模块中,例如:
other.js
module.exports = 'Français';
并从主函数中调用它:
app.get('/', function (request, response) {
response.render('index.hbs', {
str: require('./other.js')
});
});
然后浏览器无法读取utf-8中的特殊字符导致:
Fran�ais
因此,如果我的理解正确的话,编码会在从一个模块导入到另一个模块的过程中发生变化。这是正常的吗?解决该问题的最佳方法是什么(即使来自其他模块的字符串保留在 utf-8 中)?
好的,正如用户 Jonathan Lonowski 指出的那样,发生的事情是文件不是 utf-8,因此导入声明为其中文字的字符串(在例如,other.js) 在这些文件自己的编码中这样做。
解决问题就像将所有代码文件的编码更改为utf-8一样简单,因此当其他地方需要字符串(或包含字符串的对象)时,编码仍然是utf-8。