簡體   English   中英

如何使Java忽略字符串中的轉義序列?

[英]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

因此我懷疑

  1. 使用的Blob數據完全無效和/或;
  2. “默認字符集”與提供的字節的編碼不匹配

快樂編碼

暫無
暫無

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

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