ページ 11

ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 02:01
by tomomi
java / javac / xterm / X11 / iBookG4

キーボードからユニコードを入力してそれを文字に変換したいのですが、入力した文字列がそのまま表示されてしまいます。
おかしいところはわかるのですが、どのようにすれば良いのかわからないので教えてください。
お願いします。

コード:

import java.io.*;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.ArrayList;

public class test1{
	public static void main(String args[]){
//ファイル操作
		try{
			File file = new File("MOJILIST.txt");

			if (checkBeforeWritefile(file)){
				PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));

//文字のキーボード入力
				try{
					BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
					System.out.print("登録したい文字を入力してください。");
					String MOJI = br.readLine();
//この辺からおかしい?
					String c = MOJI;
					char code[] = c.toCharArray();
					System.out.println(code);

					pw.print(code);	
				}catch(IOException e){
					System.out.println(e);    
				}
				}else{
					System.out.println("ファイルに書き込めません");
				}
		}catch(IOException e){
				System.out.println(e);
		}
	}
	private static boolean checkBeforeWritefile(File file){
		if (file.exists()){
			if (file.isFile() && file.canWrite()){
				return true;
			}
		}

		return false;
	}	
}
[/java]

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 02:13
by tomomi
一部ミスがありました。訂正します。失礼しました。

java / javac / xterm / X11 / iBookG4

キーボードからユニコードを入力してそれを文字に変換したいのですが、入力した文字列がそのまま表示されてしまいます。
おかしいところはわかるのですが、どのようにすれば良いのかわからないので教えてください。
お願いします。

コード:

 

import java.io.*;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.ArrayList;

public class test1{
     public static void main(String args[]){
//ファイル操作
          try{
               File file = new File("MOJILIST.txt");

               if (checkBeforeWritefile(file)){
                    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));

//文字のキーボード入力
                         try{
                              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                                   System.out.print("登録したい文字を入力してください。");
                                   String MOJI = br.readLine();
//この辺からおかしい?
                                   String c = MOJI;
                                   char code[] = c.toCharArray();
                                   System.out.println(code);

                                   pw.print(code);	
                          }catch(IOException e){
                                   System.out.println(e);    
                          }
               }else{
                    System.out.println("ファイルに書き込めません");
               }
          }catch(IOException e){
               System.out.println(e);
          }
     }
     private static boolean checkBeforeWritefile(File file){
          if (file.exists()){
               if (file.isFile() && file.canWrite()){
                    return true;
               }
          }

          return false;
     }	
}

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 09:26
by ホヅミ
キーボード入力されたものはString型です。
これを一度ユニコード(簡単に数値型orバイト型)に変えてみてください。

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 09:34
by ホヅミ
僕も作ってみました

コード:

int num;
num = Integer.parseInt(MOJI,16);
char code = (char)num;

// または、一気に省略して
char code = (char)Integer.parseInt(MOJI,16);

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 21:44
by tomomi
ホヅミさんに書いていただいたプログラムを試しましたがうまくいきませんでした。
確認ですが、キーボードから入力するものはユニコードでいいんですよね?
ちなみに、下記のコード表を参考に「几」を「51E000」と入力したら「p」となってしまいました。

http://www.tamasoft.co.jp/ja/general-info/unicode.html

ホヅミ さんが書きました:

コード:

int num;
num = Integer.parseInt(MOJI,16);
char code = (char)num;

// または、一気に省略して
char code = (char)Integer.parseInt(MOJI,16);

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 21:56
by みけCAT
tomomi さんが書きました:ホヅミさんに書いていただいたプログラムを試しましたがうまくいきませんでした。
確認ですが、キーボードから入力するものはユニコードでいいんですよね?
ちなみに、下記のコード表を参考に「几」を「51E000」と入力したら「p」となってしまいました。

http://www.tamasoft.co.jp/ja/general-info/unicode.html
表の見方が間違っているかもしれません。
「51E0」と入力するとどうなりますか?

追記
多分できると思います。
http://ideone.com/gDGe4x

Re: ユニコードを文字にするプログラム

Posted: 2012年11月06日(火) 22:13
by tomomi
私も確認しましたが、できました!
ありがとうございます。

あと、また質問したいのですが、これを複数文字入力できるようにしようと思うのですが、ユニコードを連続して入力しても、スペースで区切ってもうまくいきませんでした。
どのようにすれば複数文字入力できるようになりますか?

みけCAT さんが書きました: 表の見方が間違っているかもしれません。
「51E0」と入力するとどうなりますか?

追記
多分できると思います。
http://ideone.com/gDGe4x

Re: ユニコードを文字にするプログラム

Posted: 2012年11月07日(水) 11:39
by ホヅミ
なぜ、
char code = (char)Integer.parseInt(MOJI,16);
これで文字が表示されるかを一度落ち着いて考えてみると、自ずと答えは見えるはずです。
入力した16進文字列を数値へ変換しております。
なので、先頭から必要な部分だけを抽出し順番に表示して行けばできるはずです。

Re: ユニコードを文字にするプログラム

Posted: 2012年11月07日(水) 11:57
by ホヅミ
もしも、スペースなどで区切ってもいいのならば
http://www.tohoho-web.com/java/string.htm
にある「 文字列を分割する(split)」という項目を見てみると幸せになれるかもしれませんね。

Re: ユニコードを文字にするプログラム

Posted: 2012年11月07日(水) 17:43
by tomomi
ホヅミ さんが書きました:もしも、スペースなどで区切ってもいいのならば
http://www.tohoho-web.com/java/string.htm
にある「 文字列を分割する(split)」という項目を見てみると幸せになれるかもしれませんね。

一瞬迷路に迷い込みましたが、幸せになれました!
ありがとうございました<(_ _)>