Outlook的mail內容顯示異常(Oracle DB寄發)

 事由是這樣的,有一封從Oracle DB的Procedure自動寄發的mail,在outlook中預覽內容時,只出現部份的內容,但是轉發或另外存檔時文字又可以正常呈現。

正確的內容應該如下:
花間一壺酒,獨酌無相親,
舉杯邀明月,對影成三人。

但是內容卻變成這樣:
花間一壺酒,獨酌無

最後發現是Oracle的程式的問題,其關鍵程式如下:
data0 := '花間一壺酒,獨酌無相親,' || chr(13)
data := data0 || '舉杯邀明月,對影成三人。'

因為chr(13)是回車,換行是chr(10),所以上述的程式寫錯了。

為了更了解chr(10)與chr(13)的差異,在網上找了一些資料來研究,自己記錄一下。

chr(10)表示換行line feed(\n),就是將游標往下移一行,但是不會移動到行首;

chr(13)則是回車carriage return(\r),就是將游標移動到當前的行首,但是不換行

在點陣式印表機下:
CR(chr(13)),印字頭回歸原位(最左邊),但不換行,所以會重疊印字
LF,即chr(10),就只是做換行動作,印字頭不回歸,會從上一行的行尾處換行列印,前面是空白的。

而在現今的電腦系統下,有此程式、平台對於chr(10)、chr(13)是一樣的處理,此時無論用chr(10)、chr(13)、chr(10)+chr(13)結果是一樣的。

而在Windows底下,正確的換行是\n\r,也就是chr(10)+chr(13)

因為Oracle Procedure是要寄給outlook的收件人,也就是windows系統,所以上述的程式我要改成下列:
data0 := '花間一壺酒,獨酌無相親,' || chr(10) ||chr(13)
data := data0 || '舉杯邀明月,對影成三人。'

重新測試後,outlook的內容就正常呈現了。


Oracle DB的listener.log清理