1
私は、Exchange Webサービスを使用して電子メールからテキストを取得し、データベースに追加しています。 、そして、文字列に追加の '?'が挿入されています。 SQL Serverで
$PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet(
[Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties);
$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text;
$email_obj = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($service,$itemID);
$email_obj.Load($PropertySet);
#getting rid of replies
$Message = $email_obj.Body.Text -replace '\s+', ' '
if($Message -like "* From: *"){
$Message = ($Message -split " From: ")[0]
}
if($Message.IndexOf('_') -ne (-1)){
$Message = $Message.Remove($Message.IndexOf('_'))
}
私は、SQL Serverで電子メールの本文を挿入します:だから私はこのように起動
$query = "INSERT INTO DB.Table ([ID],[Message],[Sender],[Recipient],[TimeStamp])
VALUES ($ID,'$Message','$Sender','$Recipient',{0})" -f (Get-TimeStamp)
Invoke-Sqlcmd -Query $query -ServerInstance $server
をしかしINSERT
はメッセージである文字列の前に?
を追加します。 を実行する前に文字列の書式を設定しようとしましたが、それは役に立ちませんでした。 \n
、\r
、\t
、または\s
のような隠し文字が見つかりません。
電子メールの本文から取得した文字列のみがこの結果を生成します。
文字列のchar単位の16進値のダンプを行います。 '? 'は単に「不明な文字」を意味する可能性があります –
あなたのメッセージ文字列はUTF-8であり、データベースフィールドは(nvarcharではなくvarchar)そうではありません。 –
文字列にUnicodeデータがありますが、あなたの列はvarcharです(@TonPlooijが示唆しているように)。面白い私は今日、これについて今日ブログしています:http://blogs.sqlsentry.com/aaronbertrand/backtobasics-unicode/ –