忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[12] [11] [10] [9] [8] [7] [6] [5] [4] [1]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

かなりハマりました。
IISで動いているaspってほとんどShift_JIS環境。
イントラのトップページがそうなのですが、そこに半年ほど前RSSを置きました。新着をDBからゴリゴリとxmlファイルにする感じで、そこにはColdFusionが載っていないので苦手なASPで作りました。
コードはShift_JIS。

UTF-8ベースのColdFusion側でそのxmlを読むときは、
<cfhttp method = "Get" url="http://hon/top/top_r.xml" charset="Shift_JIS" result="XMLFileText"/>
といった感じで、キャラセットを指定してあげればOKで、特別問題なかったのですが、先日「RSSをUTF-8にしてほしい」との要望が。

ASPでUTF-8のファイルってどうやって作るんだ? とすぐ思ったのですが、とりあえず「わかりました」と答えてしまったわけです。

あんまりASPの参考書は持っていないので、とりあえずいろいろググると、
 Fsystem.CreateTextFile(File_name,true,true) とすればよさげ。
ふんふん♪とやってみたのですが、
UTF-8ではなく、ただのunicodeみたい♪~( ̄ε ̄;)←違いがわからない男

さらにググる。

おぉ、これか?http://makoto3.cocolog-nifty.com/makoto3/2006/03/asputf8_7348.html
<%@ LANGUAGE=JScript CodePage=65001 %>
なにやら、
<cfprocessingdirective pageencoding="UTF-8">
とおなじかほりが。

・・・・・しかしハズレ。

さらにググる。

( ̄~ ̄;)ウーン・・・・みんなゴリゴリ変換かけてる模様。ちょっとなぁ・・・・

ググるのはやめて、SI屋さんたちにSkypeで聴き回る。(といっても3人ほど)
みんな、「やったことないですねぇ・・・・」と、つれない返事。「ちょっとしらべてみますよ」などと社交辞令的な返事(いやいや、ご好意ですね)。

忘れかけていた頃、メールが一通。

=======================================================
先ほどご連絡あった件ですが、個人的興味からちょっと調べてみました。


ADODB.StreamがサーバでCreateObjectできる事が条件ですが、
こんな感じでいけそうな気がします。

' ADODB.Stream保持用
Dim stream As Object
 
Set stream = CreateObject("ADODB.Stream")

'ストリームを作成
stream.Open
stream.Type = 2 ' 2 = adTypeText
stream.Charset = "UTF-8"

'文字列を格納
stream.WriteText "こんにちは。小西です。"

' テスト的にファイル書き出し
' ※ 環境、用途によって変更して下さい。
stream.SaveToFile "C:\test.txt", 2 ' 2 = adTypeText

'ストリームの破棄
stream.Close
Set stream = Nothing

以上、独り言でした。
=====================================================

おぉ、コニちゃん。ありがとう。
小さくテストしてみたら、いけそうです。

ゴリゴリ、ゴリゴリ・・・・・

でけた!UTF-8でxmlファイルが書けました。
秀丸で読むと[UTF-8]ってなってます。

ところが、今度はColdFusion側で読んだとき・・・・・
<cfhttp method = "Get" url="http://honw01/top/top_r.xml" charset="UTF-8" result="XMLFileText"/>
<cfset honxmlDoc = XmlParse(XMLFileText.Filecontent)>
とすると、
The web site you are accessing has experienced an unexpected error.
Please contact the website administrator.

The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request

XML ドキュメントを Parsing する際に、エラーが発生しました。

Content is not allowed in prolog.
 

(T▽T;)

いろいろ調べながら、エラーがでたり出なかったりするので変だなぁ・・・・と。
どうやら、できたxmlを秀丸で上書き保存するとエラーが出なくなる。

こういうときは、スリム化デバッグです。
怪しいところを残しながら、どんどん生成するxmlを小さくしてテスト。
極小のPDCAサイクルを廻すわけです。
日本語がよくない?改行コードがよくない?<item>なくしちゃえ!・・・・


結局、たった1行のxmlにまで縮小してもエラー・・・・

でも秀丸で上書き保存するだけでエラーが出なくなる。

1行まで小さくしたので、ここで気づきました。
上書き保存すると、ファイルサイズが 183バイト → 180バイト と3バイトだけ減ってることに。

この3バイトの差は何なんだ?ということで、今度はファイルダンプツールを物色。
ほどなく入手し、ダンプを見る。

すると、ダメな場合のxmlには、ファイルの最初に "EF BB BF"の3バイトがついている。
なんじゃこりゃ?

ダメ元で"EF BB BF"をググる。
ありゃりゃ、いっぱい出てくるね。なになに、ボム?BOM(ByteOrderMark)
http://sakaguch.com/utf1.html
この辺を参考に。

UTF-8(ボムあり) と UTF-8N(ボムなし) の2種類があるそうな。
どうやら、ColdFusionでXmlParseするときは、ボム無しじゃなきゃダメらしい。

さて、じゃぁどうやってボム無しにするか・・・・・asp側じゃわからんな。

(。-`ω´-)ンー・・・とColdFusionの文字列関数を眺める。
RemoveCharsかな?3文字切るんじゃダメだった。じゃ、1文字。

おぉ(゜ロ゜)  できた!

<cfhttp method = "Get" url="http://hon/top/top_r.xml" charset="UTF-8" result="XMLFileText"/>
<cfset honxmlDoc = XmlParse(RemoveChars(XMLFileText.Filecontent,1,1))>


約6時間のハマリでした。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
なかのひと
忍者ブログ [PR]