全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
×
[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.
(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時間のハマリでした。
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 | ||||
|
(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
この記事にコメントする
最新記事
(12/04)
(12/19)
(10/07)
(09/11)
(05/07)
(04/24)
(01/11)
(12/27)
(11/05)
(11/03)
ブログ内検索
カテゴリー
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。
情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。
外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・
FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。
外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・
FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新コメント
(05/20)
(03/15)
(05/25)
(02/07)
(12/19)
最新トラックバック
カレンダー
01 | 2025/02 | 03 |
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 |
ColdFusionリンク
アーカイブ
最古記事
(06/23)
(06/26)
(06/27)
(06/28)
(06/29)
(06/30)
(07/03)
(07/04)
(07/05)
(07/06)
なかのひと