function test(){
var log=(typeof Logger=='undefined')?console:Logger;
log.log(" ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ".length);
}
代码在Google Apps脚本中打印127.0,但在Chrome浏览器和Nodejs中返回128!
答案 0 :(得分:1)
这是Rhino的一个已知错误,这是Google Apps脚本使用的JS引擎。当它直接输入字符串时,它不能正确处理“软连字符”字符0xAD
;这个角色迷失了。您的字符串包含在“¬®”中。为简化示例,
"ab".length
(在a和b之间使用软连字符)在浏览器中返回3,在GAS中返回2。
一种解决方法,如果你必须在字符串中使用软连字符,就像"a\u00ADb"
"a\u00ADb" === "ab"
在浏览器中评估为true
,在GAS中评估为false
。
This discussion是指此错误。我在下面引用
主题:回复:犀牛吃怪字符
嗨理查德,
对我而言,这显然是我在Rhino中的一个错误 重现它。我会尝试为这个问题准备Rhino补丁。
请在HtmlUnit中打开一个问题,以确保它不会丢失 (并确保我已正确识别根本原因)。
干杯, 马克。
- 网址:http://www.efficient-webtesting.com 博客:http://mguillem.wordpress.com
Richard Eggert写道:
我最近尝试使用HtmlUnit来加载已经存在的页面 使用HTMLZip(http://www.htmlzip.com/)“压缩”并发现 HtmlUnit可怕地破坏了输出。由于HTMLZip声称工作 在每个主流浏览器中都适当(我会接受他们的意见),我 想想这是HtmlUnit中的一个错误,因为它应该模仿它 “普通”浏览器的行为。
检查HTMLZip生成的页面的源代码,我发现了 HTMLZip使用包含不可打印字符的JavaScript字符串 没有逃脱他们。当我替换所有不可打印的字符 与其相应的\ x转义序列,HtmlUnit能够 处理页面。但是,HtmlUnit无法处理页面 已经应用了多层HTMLZip压缩。
然后我做了一个实验,我在其中创建了一个非常简单的ISO-8859-1 仅包含声明变量的SCRIPT标记的HTML文档 “x”被分配了一个包含字符0到255的字符串, 仅转义空格和引号字符(以避免语法 错误)。我通过HtmlUnit运行它并检查了“x”的值 变量。我发现每个角色都保存完好,除了 0xAD字符,对应Unicode SHY“soft hyphen” ISO-8859-1中的字符。这个角色很简单 串!为了缩小0xAD被丢弃的位置,我用了一个 ScriptPreProcessor在将脚本传递给Rhino之前捕获脚本。 我检查了捕获的脚本,发现0xAD仍然存在 在文本中,它向我表明该角色正在被删除 由Rhino而不是HTML解析器。
我应该为此提交错误报告吗?此外,任何人都可以想到一个 快速解决方法?我能想到的就是我的头脑 编写一个自动转换SHY的ScriptPreProcessor 转义序列的字符,但没有实际解析 脚本,我最终可以转义出现在字符串之外的字符 文字。
Rich Eggert 技术人员 Proteus Technologies,LLC