[英]How to make Java ignore escape sequences in a String?
我正在編寫Java代碼以從Oracle數據庫表讀取Blob對象。
我需要檢索blob對象,並將它們存儲到String中以進行進一步處理。 我通過以下方式將blob對象的內容轉換為String:
java.sql.Blob blob = rs.getBlob(i);
columnValue = new String(blob.getBytes(1l, (int) blob.length()));
但是,當我嘗試解析結果字符串時,會出現錯誤消息“不是有效的轉義序列”,因為顯然Blob數據由某些數據組成,例如\\ x,\\ i或其他!
有沒有一種方法可以使Java忽略這些轉義序列 ,而只考慮包含其內容的字符串(即包含\\ x,\\ i等的字符串)?
我假設“解析”是指與正則表達式相關的內容,因為否則將這些值存儲在字符串中將可以正常工作-轉義序列僅對字符串文字和正則表達式有用。
無論如何, StringEscapeUtils.escapeJava(..)
應該做你想要的(來自commons-lang)
除此之外-您應該將java.sql.Clob
用於文本數據。
該問題與“ \\ x”轉義序列無關。 (這些轉義序列僅在字符串文字中具有含義-與new String
無關 。在正則表達式中找到的轉義序列僅是字符串的解釋。)
問題在於,blob包含對於給定編碼無效的數據。 從新的new String(byte[])
文檔中:
未指定默認字符集中給定字節無效時此構造函數的行為。 當需要對解碼過程進行更多控制時,應使用CharsetDecoder類。
另請注意, 不應使用 new String(byte[])
因為(同樣來自文檔):
通過使用平台的默認字符集解碼指定的字節數組來構造新的String 。
因此我懷疑
快樂編碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.