由.js脚本添加的额外字符

时间:2012-11-12 21:18:33

标签: javascript jquery character-encoding currency

使用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(注意Â字符)。我想这是一个字符编码问题,但我该如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

尝试:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
    </head>
...

您也可以尝试将£更改为&pound;

答案 1 :(得分:4)

如果在JavaScript文件中使用任何非Ascii字符,则应确保服务器为其发送正确的HTTP标头,以识别字符编码。其他方法,例如用于引用文件的charset元素中的script参数,或者依赖于浏览器以某种方式默认编码(例如,来自引用的HTML文档),因为不太可靠。

但是如果你在字符串文字中只有一个非Ascii字符,最简单的方法是逃避它。英镑符号“£”U + 00A3可以在字符串文字内转义为\xA3\u00A3

答案 2 :(得分:2)

非ASCII字符之前的意外ÂÃ符号几乎总是意味着:

  • 您保存了一些使用UTF-8编码
  • 编码的文字
  • 您正在阅读该文本,就像它被编码在(通常称为)latin 1 encoding
  • 一样

这是因为你会遇到的大多数非ASCII字符(至少如果你处理用Roman alphabet编写的语言编写的文本,就像西欧的语言一样)属于Latin 1 unicode block(包括£和大多数重音或修改过的英文字母版本,如éæ),UTF 8编码该块的所有成员从字节C2C3开始的双字节序列。但是,这些字节分别代表拉丁语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 ;