.msg檔案讀取/ 中文編碼轉換
參考自:
https://www.codeproject.com/KB/office/reading_an_outlook_msg.aspx

//------------------------------------
jkFixLib:
使用不同編碼的來源檔作讀取 有中文轉換的問題
基本上分為 8位元讀取(utf8/big5) 跟 16位元讀取(unicode) 的問題
OutlookStorage.Message的 8位元讀取(utf8)會造成讀取中文編碼錯誤 需修改成(default) >> 應該是big5
//-------------------------------

//jk 轉碼測試心得 :
// 讀入stream的時候 要根據來源檔的編碼作讀取設定 才能轉出正確的中文字串 之後可以任意作編碼轉換的動作
// BUT 如果一開始的讀取編碼就錯誤了(中文變亂碼) 那後續的轉碼過程 中文都無法正常

//==========================
]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using iwantedue; //加入 OutlookStorage.Messag LIB class

private void button1_Click(object sender, EventArgs e)
{
// OutlookStorage.Message outlookMsg = new OutlookStorage.Message(@"C:\uni_test.msg");//來源檔是unicode(utf-16)編碼
OutlookStorage.Message outlookMsg = new OutlookStorage.Message(@"C:\07_test.msg");//來源檔是big5編碼

//jk測試心得 :
// 讀入stream的時候 要根據來源檔的編碼作讀取設定 才能轉出正確的中文字串 之後可以任意作編碼轉換的動作
// BUT 如果一開始的讀取編碼就錯誤了(中文變亂碼) 那後續的轉碼過程 中文都無法正常

//-------編碼轉換--------------
byte[] bb = Encoding .UTF8 .GetBytes ( outlookMsg.BodyText );
// MessageBox.Show(Encoding.Default .GetString(bb));//驗證轉碼後的字串,仍正確的顯示
byte[] cc = Encoding.Convert(Encoding.UTF8 , Encoding.Unicode , bb);//進行轉碼,參數1,來源編碼,參數二,目標編碼,參數三,欲編碼變數
string title = Encoding.Unicode .GetString(cc); // 轉換成UTF-8編碼
//-------/編碼轉換/-----------------
textBox_title.Text = outlookMsg.Subject; //可以正常顯示中文(UTF-8編碼)
textBox_content.Text = outlookMsg.BodyText;//可以正常顯示中文(UTF-8編碼)
}
創作者介紹
創作者 prague12 的頭像
prague12

prague12

prague12 發表在 痞客邦 留言(0) 人氣( 619 )