2008年09月21日

Visual Basic2008(VB2008)の文字コード

Visual Basic 2008(vb2008)の文字コードはUTF-8になっています。

VB6.0の時はShift-jis だったんですが。
たぶんvb.netからかなあ

UTF-8になったおかげで、amazonや楽天などのデータなどを取得しても変換せずに使えるところがとても便利です。
エンコードかければいいということはあるのですが、ないほうが面倒ないですね。


しかし、ここで、VB2008で書いたプログラムにテキストファイルを読み込ませるような場合、以前VB6で使っていたShift-jis のファイルなどもUTF-8にエンコードして開いてくれるということです。


Shift-jis や EUCなどで使いたい場合は

TextFile = New IO.StreamReader(FilePath,System.Text.Encoding.Default)
とオプションをつける必要があるようです。


またIEなどからデータを取得する場合もInternet Explorer でHPを開くときにも自動で内部の文字コードのUTF-8にあわせてくれているようでその点文字コードをあまり意識しないでIEを操作したりできます。


Internet Explorerが文字コードを合わせているのか?どうなのかは知りませんが文字コードを気にしなくていいというのは便利です



例として

以下のソースはseesaaのブログサービスで、記事の設定をしたときにそれが正常に終了すると
HTMLの中に「記事の標準設定が完了しました」という文字が出現します
もしそれがなければ、エラーだとメッセージボックスが警告します。

設定の部分ははしょってますが

        objDocument = objIE.Document
        Dim HTML As String
        HTML = objDocument.documentelement.innertext

        If InStr(HTML, "記事の標準設定が完了しました") = 0 Then
            MsgBox("記事の設定で何らかのエラーがありました、確認してください")
            Flag = False
            Return Flag
            Exit Function
        End If

seesaaのブログサービスはshift-jisで書かれていますが
utf-8のVB2008では、seesaaのサービスのHTMLを勝手にUTF-8で読み込んだりしてくれるのでとても便利に使えるといえましょう

posted by kiyo at 20:17| VB2008の文字コード | このブログの読者になる | 更新情報をチェックする

2008年09月03日

Visula Basic 2008からAtom API でLivedoorに投稿してみるみる

VB2008(Visual Basic 2008)からLivedoorに投稿するのが結構面倒です
xml_rpc じゃなくてAtom APIとかの仕様なので、WSSE認証の作成というのをしなければならないようです。
いろいろ調べてみていろんな方のサイトやPHPなんかのプログラムも参考にしてAtomで投稿できるようになりました

LiveDoorPostはFunctionでリターンをするのですが、これはなんにも返しません??
投稿できればいいや。。。


    Public Function AtomXML(ByVal Title As String, ByVal Body As String)
        Dim XMLString As String

        XMLString = "<?xml version=""1.0"" encoding=""UTF-8""?>"
        XMLString &= "<entry xmlns=""http://purl.org/atom/ns#"" xmlns:dc=""http://purl.org/dc/elements/1.1/"">"
        XMLString &= "<title>" & Title & "</title>"
        'XMLString &= "<dc:subject>test</dc:subject>"
        XMLString &= "<content type=""text/html"" mode=""escaped"">"
        XMLString &= "<![CDATA[" & Body & "]]>"
        XMLString &= "</content>"
        XMLString &= "</entry>"

        Return XMLString
 

    Function LiveDoorPost(ByVal username As String, ByVal password As String, ByVal BlogID As String, ByVal XMLString As String) As String
        Dim postDataBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(XMLString)
        Dim URL As String = "http://cms.blog.livedoor.com/atom/blog_id=" & BlogID
        'HttpWebRequestの作成
        Dim webreq As System.Net.HttpWebRequest = _
            CType(System.Net.WebRequest.Create(URL), System.Net.HttpWebRequest)
        webreq.Method = "POST" 'GET指定
        webreq.UserAgent = "Blogposter" 'UA設定(ソフト名)
        webreq.ContentType = "text/xml"
        webreq.ContentLength = postDataBytes.Length

        'WSSE認証の作成
        Dim shasp As New System.Security.Cryptography.SHA1CryptoServiceProvider() 'SHA処理用
        Dim nowt As DateTime = DateTime.Now '現在の時間取得
        Dim tim As String = nowt.ToString("yyyy-MM-ddTHH:mm:ssZ") '文字列にする(2005-12-11T22:39:56Z)の形式
        Dim non As String = "tekitounisitemiruyon" 'Nonce(WSSEに必須の20文字の文字列)
        Dim b64 As String = System.Convert.ToBase64String(shasp.ComputeHash(System.Text.Encoding.UTF8.GetBytes(non & tim & password))) 'NonceTimePasswordをSHA→Base64エンコード
        Dim ninsyou As String = "UsernameToken Username=""" & username & """, PasswordDigest=""" & b64 & """, Nonce=""" & System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(non)) & """, Created=""" & tim & """" '認証文の完成
        webreq.Headers.Add("X-WSSE", ninsyou) 'HTTP接続に付ける


        Dim reqStream As System.IO.Stream = webreq.GetRequestStream()

        reqStream.Write(postDataBytes, 0, postDataBytes.Length)
        reqStream.Close()

        'レスポンスの取得

        Dim response As System.Net.HttpWebResponse = Nothing
        Dim doc As New System.Xml.XmlDocument()
        'レスポンスの取得
        Try
            response = CType(webreq.GetResponse(), System.Net.HttpWebResponse)
            Dim strm As System.IO.Stream = response.GetResponseStream()

            'XmlDocumant に読み込む
            doc.Load(strm)
        Catch ex As Exception

            Return "エラー:" & ex.Message

        Finally
            If Not (response Is Nothing) Then
                response.Close()
            End If
        End Try

        '結果を得る
        'doc.Value
        Dim FileName As String = Application.StartupPath() & "\Tools\Livedoorxml.txt"
        doc.Save(FileName)

        Dim paramsNode As System.Xml.XmlNode = doc.SelectSingleNode("/methodResponse/params/param/value")

        'Try
        'Return paramsNode.SelectSingleNode("int").InnerText
        'Catch ex As Exception
        Return ""
        'End Try

    End Function

こんな感じでこの関数は使います
    LiveDoorPost(username, password,BlogID ,AtomXML(Title,Body))

posted by kiyo at 20:01| Comment(0) | TrackBack(5) | xml | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。