簡體   English   中英

Java代碼意外在行尾添加“”

[英]Java code unexpectedly appending “&#13” to line endings

我們的代碼意外地將&#13附加到由以下例程創建的行的末尾:

public String getNotation(ClientMessage TransactionMessage) {
    StringBuffer sb = new StringBuffer();
    String lineSeparator = System.getProperty("line.separator");
    String osName = System.getProperty("os.name").toLowerCase();
    sb.append(getNotationTitle(TransactionMessage));
    sb.append(lineSeparator);
    sb.append(lineSeparator);

僅當代碼在Windows Server 2008機器上運行時,“ line.separator”似乎才被轉換為字符串&#13 當我們在Windows 7或UNIX上運行相同代碼時,它運行良好。

有沒有人遇到過這個問題,如果有的話,有沒有合乎邏輯的解釋和解決方案來糾正這一問題?

HTTP(和其他文本Internet協議)強制將ASCII CR+LF用於換行符序列CR是“回車”字符( \\r ),而LF是“換行”字符( \\n )。

此轉義序列- \\r\\n也是Windows系統上使用的文件分隔符,因此是您對System.getProperty("line.separator")調用返回的結果,然后由對sb.append(lineSeparator)的調用sb.append(lineSeparator)到輸出字符串。 這在您的測試和“在實際服務器上執行代碼”中都發生了-在兩種情況下(我認為),代碼都在Windows服務器上執行 ,因此生成了相同的字符串。

如您建議的那樣,此序列未轉換為&#13 如果是這樣,那么您的整個輸出將顯示在一行上,並在要換行的位置插入&#13 但是,聽起來不是這樣-聽起來好像您在預期的位置得到了換行符,但是每行末尾有一個意外的&#13

當我們認識到在大多數編程語言和環境中,一個孤立的\\n足以表示一個換行符,並且13是回車符的十進制表示形式時,這很有意義

我假設您的測試正在顯示以原始字符串形式生成的字符串(可能只是通過調用println(sb.toString()) ,在這種情況下, \\r\\n會按照您的預期進行解釋和顯示。

我還假定您的TransactionMessage類不是以原始字符串而是HTML形式傳輸消息,因為&#13將是回車符的十進制表示形式的HTML實體代碼。

我無法確切地告訴您原因(至少在不了解您的特定情況的情況下),但是由於某種原因,LR字符已轉換為其十進制表示形式,並且您選擇的在客戶端上顯示結果字符串的方法沒有認識到,表示作為一個控制字符,因此顯示其作為字面&#13立即前述\\n ,其解釋為轉義。

(無關的旁注:從Java 7開始,您可以使用 System.lineSeparator() 代替 System.getProperty("line.separator")

暫無
暫無

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

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