iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

IT工作中曾遇到的問題系列 第 4

Outlook的信件內容顯示異常(Oracle DB自動寄發)

  • 分享至 

  • xImage
  •  

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

信件完整的內容應該如下:

花間一壺酒,獨酌無相親,
舉杯邀明月,對影成三人。

但是預覽的內容卻變成這樣:

花間一壺酒,獨酌無

原本以為是Outlook的問題,結果所有收到Oracle DB的Procedure寄的信的人都是這樣,但是從Oracle EBS寄出來的信卻是正常的。

後來把信件轉成文字檔並用文書編輯器把所有的字元(包含換行等)顯示出來後,終於發現是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的預覽內容就正常呈現了。至於為什麼信件轉發後就會正常,我也不太清楚,也許是outlook的一個bug

此篇文章參考我的blog:https://blog.twtnn.com/


上一篇
樹莓派Raspberry Pi關閉休眠、螢幕長亮、開機自動執行瀏覽器
下一篇
Windows batch script:用findstr來搜尋指定的字串
系列文
IT工作中曾遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言