- PR -

改行コードの付け替え

投稿者投稿内容
gala
会議室デビュー日: 2003/12/11
投稿数: 4
投稿日時: 2003-12-11 16:09

XMLファイルから文章を読み込み、一旦javaのクラス内にString型として保持、最終的にSQL Serverに登録を行うという流れの処理を作成しています。
XMLファイルではShift-JISを指定しています。XMLファイル内で改行されていたものが、SQL Serverに登録された状態では改行されていないという問題が発生しました。
おそらく、改行コードがCR+LFでなくてはならないのにjavaでの処理においてLFになっているのではないかと考えていますが、どのように改行コードをCR+LFに修正するのがよいのでしょうか。教えてください。
どの時点で改行コードが変わってしまっているのかがわからないんです。javaで読み込ませるとエンコードがUnicode になると思うのですが、Shift-JISを指定したXMLから文字列を読み込んだ場合、その時点(読込み時)でUTF-8という扱いになるのでしょうか。

Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-12-11 17:15
XMLファイルの読み込みはどのように行っていますか?
もし、次のような読み込み方をしているなら、読み込まれたStringオブジェクトは
既に改行コードを含んでいません。
コード:
BufferedReader br = new BufferedReader(...);
String line;
StringBuffer buffer = new StringBuffer();
while((line = br.nextLine())!=null){
    buffer.append(line);
}
String xml = buffer.toString();


また、パーザーを使ってXMLを読んでいる場合も、読み込みの過程で
改行がなくなっている可能性があります。
どちらにせよ、読み込まれたStringに改行が含まれているか確認してください。

また、私は改行コードが文字コードの変更で置き換えられることは無いと思います。
Shift-JISでも、EUCでも、UnicodeでもCRは0x0d、LFは0x0aです。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-12-11 17:29
XMLの仕様によると、XMLプロセッサは改行を全て#xA(つまりLF)としてアプリケーションに渡す仕様となってます。
参考:
http://www.fxis.co.jp/xmlcafe/tmp/rec-xml.html#sec-line-ends
gala
会議室デビュー日: 2003/12/11
投稿数: 4
投稿日時: 2003-12-11 17:30
XMLの読込みはパーサを使用しています。
SQL Serverに登録された時点で改行されていないというのは、SQL Serverから調べたいレコードをコピーしてテキストエディタで見た場合の話なんですが、メモ帳で開いた場合には改行されませんでした。しかし、その他秀丸などのエディタでは改行されているのが確認できました。
開くエディタによって改行される、されないが違ったので、改行コードが途中で変わってしまったのではないかと思ったのです。
改行コードはLFが入っているようです。(10進で10でした)
gala
会議室デビュー日: 2003/12/11
投稿数: 4
投稿日時: 2003-12-11 17:33
XMLからだとプラットフォームに関係なくLFとして渡されるということですか。
そうすると、XMLから読み込んだデータの改行コードをCR+LFにしたい場合はjavaの処理でCRを加えるという方法になるんでしょうか。
その場合はXMLから読み込んだデータをLFで1行と判断し、1行毎にCRを付けると言う方法ぐらいしか思いつきませんが・・
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-12-11 18:03
引用:

galaさんの書き込み (2003-12-11 17:33) より:
そうすると、XMLから読み込んだデータの改行コードをCR+LFにしたい場合はjavaの処理でCRを加えるという方法になるんでしょうか。


javaのバージョンはいくつですか?
1.4なら、
String#replaceAll("\n","\r\n")
ではどうでしょうか?
gala
会議室デビュー日: 2003/12/11
投稿数: 4
投稿日時: 2003-12-11 18:13
残念ながらjavaのバージョンは1.3なんです。

ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2003-12-12 08:43
Commons Lang の StringUtils#replace を使うというテもあります。

スキルアップ/キャリアアップ(JOB@IT)