Grails4.0.1-Spock单元测试用例因空格而失败

Grails4.0.1-Spock单元测试用例因空格而失败,grails,internationalization,spock,Grails,Internationalization,Spock,我在grails4.0.1应用程序中使用单元测试测试i18n格式,但看到了奇怪的结果。 对我来说,这个规格条件应该得到满足,但事实并非如此 我想没有人有过类似的经验可以解释,或者可能只是一个bug? 任何帮助都将不胜感激。作为一个想法: 您是否可以迭代预期值和实际值,并将字符逐个转换为ascii,以便您可能会看到差异 for( c in ​'123 456,78 $') { println "$c ${(int)c}" } 有人建议我获取每边的十六进制值,之后就可以清楚地看出格式化

我在grails4.0.1应用程序中使用单元测试测试i18n格式,但看到了奇怪的结果。 对我来说,这个规格条件应该得到满足,但事实并非如此

我想没有人有过类似的经验可以解释,或者可能只是一个bug? 任何帮助都将不胜感激。

作为一个想法:

您是否可以迭代预期值和实际值,并将字符逐个转换为ascii,以便您可能会看到差异

for( c in ​'123 456,78 $') {  
  println "$c   ${(int)c}"
}

有人建议我获取每边的十六进制值,之后就可以清楚地看出格式化程序使用的是非中断行空间c2a0,而我的预期值是使用标准种类20

我已经解决了这个问题,在预期的一面使用非中断空格,这可以通过按住Alt+空格按钮在Mac上实现,如下所示


从屏幕截图上看不出字符串中实际有哪些空白字符。您将需要查询这些字符串以识别差异。只是为了让您了解可能的。。。但是客户端和服务器上的不同字符编码也可能有问题。但是客户端和服务器上的不同字符编码也可能有问题。-我认为这在这里不太相关。它看起来像是在对象上调用方法的单元测试,而不是HTTP请求。将当前断言替换为formatService.formatCurrency123456.78.bytes==“123 456,78$”。bytes可能会对特定问题有所帮助。您是对的@JeffScottBrown。我已经通过一些好的建议解决了这个问题,以获得每边的十六进制值。回答如下。另外,println“123 456,78$”。字节是另一种选择。在您的IDE中,这有一种错误的类字符编码的味道。我不太确定。我不希望IDE使用不间断的空格,除非我特别想这样做。也许我误解了。