- PR -

Unicode(little-endian)でのファイルの保存方法について

1
投稿者投稿内容
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2005-02-03 22:44
Javaでは、EncodeにUTF-16を指定すると、
Unicode(big-endian)で保存されてしまいます。

_bufWrite = new BufferedWriter(new OutputStreamWriter((new FileOutputStream(_file)), "UTF-8"));

Encodeの指定をUnicodeLittleなどに変更すると
今度はNullPointerExceptionが発生します。

Unicode(little-endian)でファイルを作成するにはどのようにすれば良いのでしょうか?
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2005-02-03 23:05
UnicodeLittleでいけますよ?J2SE1.4.2_05とJ2SE5.0で確認済みです。

ところでNullPointerExceptionが発生しているのが気になります。
エンコーディングの問題ならUnsupportedEncodingExceptionあたりが発生しそうな
ところなのですが。

何はともあれ、スタックトレースが気になります。
ついでに使用したJavaのバージョンも。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2005-02-03 23:16
IANA標準名では "UTF-16LE" です。

1.5.0_01で試しましたが
"abc".getBytes("UnicodeLittle"); は通りましたが、

java.nio.charset.Charset.forName("UnicodeLittle");
はjava.nio.charset.UnsupportedCharsetException でした。

不思議です・・・
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2005-02-04 00:22
引用:

kitoさんの書き込み (2005-02-03 23:16) より:
1.5.0_01で試しましたが
"abc".getBytes("UnicodeLittle"); は通りましたが、

java.nio.charset.Charset.forName("UnicodeLittle");
はjava.nio.charset.UnsupportedCharsetException でした。


このページを読めば疑問は解けるかと。
http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
java.langおよびjava.ioと、java.nioでは、エンコーディングの名前が違うということです。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2005-02-04 01:28
引用:

koeさんの書き込み (2005-02-04 00:22) より:

このページを読めば疑問は解けるかと。
http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
java.langおよびjava.ioと、java.nioでは、エンコーディングの名前が違うということです。



なるほど。そういうことだったのですか。

今まで"UTF-16BE"/"UTF-16LE"を使うのが無難と思っていたのですが、
このページを見るとUTF-16LE/BEで出力するとBOMがつかないのですね。
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2005-02-05 02:53
引用:

koeさんの書き込み (2005-02-03 23:05) より:
ところでNullPointerExceptionが発生しているのが気になります。
エンコーディングの問題ならUnsupportedEncodingExceptionあたりが発生しそうな
ところなのですが。
何はともあれ、スタックトレースが気になります。
ついでに使用したJavaのバージョンも。



JDK:jdk1.3.1_01
Trace:
2005-02-04 16:42:00,931 ERROR:[Thread-12] Catch The Exception .(CsvExportUtils.java:239)
java.lang.NullPointerException
at jp.co.xxx.Utility.CsvExportUtils.makeFile(CsvExportUtils.java:237)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java:574)
at org.apache.tomcat.core.Handler.invoke(Handler.java:322)
at org.apache.tomcat.core.Handler.service(Handler.java:235)
at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:485)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:917)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833)
at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Http10Interceptor.java:176)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:494)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:516)
at java.lang.Thread.run(Thread.java:484)

です。
ちなみに、UTF-16ですと普通にファイルを作成出来ます。
UTF-16LE、UnicodeLittle で上記事象が発生しています。
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2005-02-09 09:38
調査の結果、全然関係ない場所で(実は背後でencode文字列のEnumをやっていました)、
NullPointerExceptionが発生していた事が判明しました。

皆さんのご指摘どおり、encode文字列の修正で、無事Unicode(little-endian)での出力が出来ました。
お騒がせいたしました。
1

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