回答編集履歴

1

補足

2016/10/18 05:37

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -7,3 +7,23 @@
7
7
 
8
8
 
9
9
  デフォルトの動作では(たぶん)デフォルトの置換文字である'\uFFFD'に置換されているのだと思えます。この文字をMS932でMicrosoft ShiftJISに変換すると0x3Fすなわち'?'に変換されてしまうようですが、ShiftJISへ変換するまえ段階のUnicodeでなら'\uFFFD'なので'?'(Unicode='\u003F')と区別できると思います。変換した結果をファイルに出す前にJavaプログラム内で確認してみてはいかがですか?
10
+
11
+
12
+
13
+ 回答がしりきれになってる感じだったので若干蛇足な補足を・・・
14
+
15
+
16
+
17
+ CSVから読み込んでJavaプログラム(Unicodeの世界)にいるうちに'\uFFFD'をほかの都合のよい文字に置き換えたら質問者さんのやりたいことは達成できると思います。一度'\uFFFD'をファイルへ吐き出す(その際にUnicode->MS932の変換が行われてしまう)と、もはや'?'と判別不能になるのですから。
18
+
19
+
20
+
21
+ ちなみにJavaが'\uFFFD'をデフォルトにしている理由はそこがUnicodeで未割当文字になっているからと思えます。
22
+
23
+
24
+
25
+ [Unicode表 0xFFxx](https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_F000-FFFF)
26
+
27
+
28
+
29
+ この文字を'?'に変換しているのはMS932さんつまりMicrosoftの仕様になるのですが余計なことをしてくれるものだと思いました・・・ちょうど今自分もJIS X 0201/JIS X 0208の変換問題を考えていてMS932さんの落とし穴を知りつつあるところです。