簡體   English   中英

如何在Ruby中的單引號字符串中打印反斜杠

[英]How to print backslash in single quoted string in ruby

我在ruby 2.3.3版本中有以下字符串:

'\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01u\x00\x00\x01u\b'

我想將其與另一個字符串進行比較。 但是,發生以下情況:

x = '\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01u\x00\x00\x01u\b'
 => "\\x89PNG\\r\\n\\x1A\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01u\\x00\\x00\\x01u\\b"

如果添加了額外的斜杠,則會使比較混亂。 同樣令人困惑的是,發生了以下情況:

 x.gsub("\\\\", "\\")
 => "\\x89PNG\\r\\n\\x1A\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01u\\x00\\x00\\x01u\\b"

我嘗試使用%{}和%Q []雙引號。 它們都沒有簡單地存儲字符串而不解釋轉義序列。 如何存儲此字符串而不更改它?

只要字符串共享相同的編碼,字節比較將是不需要額外轉義的絕佳解決方案。

str.bytes == other.bytes

要顯示反斜杠,只需用一個反斜杠將其轉義即可:

puts '\\'
\

此外,根據您的確切用法,可以使用<=>運算符:

(str <=> other).zero?

編輯

為了進一步擴展,如果您執行以下操作,則會顯示不同的內容:

a = '\\'
p a
=> '\\'

這將顯示為兩個反斜杠,但實際上它仍然是單個字符,而不是兩個。

a = '\\'
a.bytes
=> [92] # ASCII code for a backslash (single byte)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM