20563


以下のコードで取得したHTMLソースの、2バイト文字が&#xxxxxとなってしまう。  
10進数数値文字参照をテキスト文字列に変換したい。  
変換のヒントでも大歓迎です。

[code]

    // 通信先のURLを生成
    let myUrl:NSURL = NSURL(string:"http://k2k.sagawa-exp.co.jp/p/sagawa/web/okurijosearch.do?okurijoNo=123456789012")!
    
    // リクエストを生成
    print(myUrl)
    let myRequest:NSURLRequest  = NSURLRequest(URL: myUrl)
    
    // 送信処理を始める.
    let res:NSData? = try! NSURLConnection.sendSynchronousRequest(myRequest, returningResponse: nil) as? NSData
    
    // 帰ってきたデータを文字列に変換.
    if let myData:String = NSString(data:res!, encoding: NSUTF8StringEncoding) as? String {
        // 文字コード指定で正しくStringへ変換できた時の処理
        print(myData)
    }
    
[/code]

以下、帰ってくるデータの一部です。

[code]

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <title>&#20304;&#24029;&#24613;&#20415; - &#12304;&#12362;&#33655;&#29289;&#21839;&#12356;&#21512;&#12431;&#12379;&#12469;&#12540;&#12499;&#12473;&#12305;</title>
        <meta charset="Windows-31J">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="ROBOTS" content="NONE">
        <meta name="keywords" content="">
        <meta name="description" content="">
        <meta name="copyright" content="&#20304;&#24029;&#24613;&#20415;&#26666;&#24335;&#20250;&#31038;(c)">
    
[/code]

以下略

下記のリンク先で、している変換をSwiftで実現したいのです。  
[2] 10進数数値文字参照を文字列に変換 の部分です。  
<http://www.benricho.org/moji_conv/15.html>

よろしくお願いいたします。


CC BY-SA 3.0
2016-01-03T04:52:22.263
20554
2016-01-03T11:26:22.330
2016-01-03T11:26:22.330
5519
13866
question
swift html
取得したデータの10進数数値文字参照を元のテキストに変換したい。


`CFStringTransform(_: CFMutableString!, _: UnsafeMutablePointer<CFRange>, _:
CFString!, _: Bool) -> Bool`を使って変換するのが簡単です。

<https://developer.apple.com/library/ios/documentation/CoreFoundation/Reference/CFMutableStringRef/#//apple_ref/c/func/CFStringTransform>

数値文字参照から変換するにはtransform IDに`Any-Hex/XML10`を指定して、`reverse`パラメータは`true`とします。

[code]

    CFStringTransform(str, nil, "Any-Hex/XML10", true)
    
[/code]

例えば、下記のようにします。

[code]

    let myUrl = NSURL(string:"http://k2k.sagawa-exp.co.jp/p/sagawa/web/okurijosearch.do?okurijoNo=123456789012")!
    let myRequest = NSURLRequest(URL: myUrl)
    
    let res = try! NSURLConnection.sendSynchronousRequest(myRequest, returningResponse: nil)
    
    if let myData = NSString(data:res, encoding: NSUTF8StringEncoding) {
        let str = NSMutableString(string: myData)
        CFStringTransform(str, nil, "Any-Hex/XML10", true)
        print(str)
    }
    
[/code]


CC BY-SA 3.0
2016-01-03T11:10:08.613
20563
2016-01-03T11:10:08.613
5519
20554
answer