7

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

4

5 回答 5

6

尝试:

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

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

于 2012-11-12T21:20:07.017 回答
4

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

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

于 2012-11-12T21:44:46.077 回答
3

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

发生这种情况是因为您会遇到的大多数非 ASCII 字符(至少如果您正在处理使用源自罗马字母的语言编写的文本,例如西欧的语言)属于拉丁 1 unicode块(包括£和大多数重音或修改版本的英文字母,如éand ),而 UTF 8 使用以字节或.æ开头的两字节序列对该块的所有成员进行编码。但是,这些字节分别代表和latin 1 编码。C2C3ÂÃ

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 中,那么一定是出了问题的是您已经保存了 UTF-8 编码的 JavaScript 文件,但浏览器认为它是 latin1 编码的,因此在解码后得到了错误的字符。

要解决此问题,请确保使用 HTTP 标头正确指定 JavaScript 文件的编码,例如:

content-type: text/javascript; charset=utf-8
于 2016-06-09T23:50:08.100 回答
2

只需将 charset="UTF-8" 添加到脚本标记即可。 例如

<script src="myJSFile.js" charset="UTF-8"></script>
于 2017-02-01T13:31:34.400 回答
-1
   var poundSign = '\xA3';

   var dollars = "OK, gonna exchange $ " + dollarsToExchange + " for " + poundSign + guineas ;
于 2016-06-09T22:38:33.280 回答