如何从Ruby页面对象文本中转义双引号

如何从Ruby页面对象文本中转义双引号,ruby,text,escaping,double-quotes,page-object-gem,Ruby,Text,Escaping,Double Quotes,Page Object Gem,在使用页面对象gem时,我试图从页面中提取文本以验证错误消息。其中一条错误消息包含双引号,但当page对象从页面中提取文本时,它会提取一些其他字符 expected ["Please select a category other than the Default â?oEMSâ?? before saving."] to include "Please select a category other than the Default \"EMS\" before saving." (RSp

在使用页面对象gem时,我试图从页面中提取文本以验证错误消息。其中一条错误消息包含双引号,但当page对象从页面中提取文本时,它会提取一些其他字符

expected ["Please select a category other than the Default â?oEMSâ?? before saving."] 
to include "Please select a category other than the Default \"EMS\" before saving." 
(RSpec::Expectations::ExpectationNotMetError)

我不太确定如何转义这些-我不确定在哪里可以使用正则表达式并能够转义这些奇怪的字符。

老实说,您的验证过于复杂了

expected ["Please select a category other than the Default â?oEMSâ?? before saving."] 
to include "Please select a category other than the Default \"EMS\" before saving." 
(RSpec::Expectations::ExpectationNotMetError)
我建议你简化你要做的事情,首先问问自己:引用中的部分是你验证的关键部分吗

如果是,则通过执行String.contains(“EMS”)将其隔离

如果不是,那么您可能做了太多的工作,只需检查验证中所需的内容:

String.beginsWith(“请选择默认类别以外的类别”)

关于您面临的实际问题,在技术层面上,您存在编码问题。在将结果字符串传递给验证之前,请使用utf-8对其进行编码,这样就可以了


祝你好运

很可能是这行的某个地方对字符串进行了不正确的编码。(提示是重音字符后跟
)引号很可能在某个地方被转换为“智能引号”。将Window-1252与UTF-8进行比较:

Code Point      Characters          UTF-8 Bytes
Unicode Windows
        1252    Expected    Actual
------  ----    -           ---     ----------- 
U+201C  0x93    “           “     %E2 %80 %9C
U+201D  0x94    ”           †     %E2 %80 %9D
您要做的是抽查代码中的各个位置,以找到字符串的第一个编码位置,而不是UTF-8:

puts error_str.encoding
(为了清楚起见,
error\u str
是保存您正在测试的字符串的变量。我正在使用
put
,但您可能需要另一种方法来记录诊断消息。)

找到未编码UTF-8的字符串后,可以将其转换为:

error_str.encode('UTF-8')
或者,如果字符串是硬编码的,只需替换字符串即可


有关更多调试建议,请参阅:和。

能否发布生成此错误消息的代码?如何使用页面对象gem?另外,似乎有一些方法可以使用gem改变编码,你有没有尝试过类似的方法?这就是我一直在寻找的。不幸的是,我确实需要引号中的部分作为验证的一部分,因为有多个类似的错误消息,我需要确保得到正确的消息。