使用jQuery和formatCurrency扩展如下:
$(function() {
$(".currency").blur(function(){ formatCurrencyInput(this) });
});
function formatCurrencyInput(input) {
if($(input).val() != '') {
if(isNumeric($(input).val())) {
$(input).formatCurrency(null,{groupDigits:false,roundToDecimalPlace:2,symbol:'£'});
$(input).css('border-color', '');
}
else {
$(input).css('border-color', '#FFCCCC');
}
}
}
“货币”类的所有文字输入都是从45 =>转换而来的。例如45.00英镑。
奇怪的是,如果formatCurrencyInput函数在该部分中定义,它可以正常工作。如果我将函数外部化为.js文件,它将返回£45.00(注意Â字符)。我想这是一个字符编码问题,但我该如何解决这个问题?
答案 0 :(得分:4)
尝试:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
...
您也可以尝试将£
更改为£
。
答案 1 :(得分:4)
如果在JavaScript文件中使用任何非Ascii字符,则应确保服务器为其发送正确的HTTP标头,以识别字符编码。其他方法,例如用于引用文件的charset
元素中的script
参数,或者依赖于浏览器以某种方式默认编码(例如,来自引用的HTML文档),因为不太可靠。
但是如果你在字符串文字中只有一个非Ascii字符,最简单的方法是逃避它。英镑符号“£”U + 00A3可以在字符串文字内转义为\xA3
或\u00A3
。
答案 2 :(得分:2)
非ASCII字符之前的意外Â
和Ã
符号几乎总是意味着:
这是因为你会遇到的大多数非ASCII字符(至少如果你处理用Roman alphabet编写的语言编写的文本,就像西欧的语言一样)属于Latin 1 unicode block(包括£
和大多数重音或修改过的英文字母版本,如é
和æ
),UTF 8编码该块的所有成员从字节C2
或C3
开始的双字节序列。但是,这些字节分别代表拉丁语1编码中的Â
和Ã
。
Python shell中的快速演示:
>>> b'\xc2'.decode('latin1')
'Â'
>>> '£'.encode('utf8')
b'\xc2\xa3'
>>> '£'.encode('utf8').decode('latin1')
'£'
>>> 'æ'.encode('utf8')
b'\xc3\xa6'
>>> 'æ'.encode('utf8').decode('latin1')
'æ'
如果您的JavaScript中出现这些意外字符,那么您必须将JavaScript文件保存为UTF-8编码,但浏览器认为它是latin1编码的,所以错误的字符也是如此解码后。
要解决此问题,请确保使用HTTP标头正确指定JavaScript文件的编码,如下所示:
content-type: text/javascript; charset=utf-8
答案 3 :(得分:1)
只需将charset =“UTF-8”添加到脚本标记即可。 例如
<script src="myJSFile.js" charset="UTF-8"></script>
答案 4 :(得分:-1)
var poundSign = '\xA3';
var dollars = "OK, gonna exchange $ " + dollarsToExchange + " for " + poundSign + guineas ;