我正在尝试将日语单词存储为字符串,但每次我尝试存储字符串时,我都会在字符应该出现问号。
例如,如果用户输入:こんにちは
String string = scan.next();
System.out.println(string);
它将显示五个问号,其中应显示五个字符。如果我将日语单词声明为字符串,虽然我可以显示单词。
离。
String Kana = "こんにちは";
System.out.println(Kana);
将显示こんにちは
。
我遇到与JLabels
类似的问题,当我发送用户输入的单词时,我会收到问号,但是当我使用单词设置文本时,我设置它有效。我有显示日文文本的字体,所以我处于死胡同。
我相信一旦用户输入单词,文本就会发生一些事情,但我无法弄清楚是什么。我也使用netbeans
,源文件在unicode
编码,所以我不认为这是问题。
以下是完整代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.awt.*;
import java.io.*;
import java.nio.charset.Charset;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author tyler.stanley.4937
*/
public class JavaApplication1 extends JFrame {
/**
* @param args the command line arguments
*/
private final Charset UTF8_CHARSET = Charset.forName("UTF-8");
File fontFile = new File("MSMINCHO.TTF");
Font baseFont = null;
Scanner scan=new Scanner(System.in,"UTF-8");
JLabel japanese = new JLabel("Hello");
public JavaApplication1(){
//Locale.setDefault(new Locale("ja"));
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container contentPane = getContentPane();
JPanel panel = new JPanel(new FlowLayout());
contentPane.add(panel);
panel.add(japanese);
}
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException, FontFormatException {
// TODO code application logic here
JavaApplication1 ja = new JavaApplication1();
ja.start();
}
public void start() throws FileNotFoundException, IOException, ClassNotFoundException, FontFormatException{
//Locale bLocale = Locale.forLanguageTag("ja-JP-u-ca-japanese");
InputStream fontFileInputStream = new FileInputStream(fontFile);
baseFont = Font.createFont(Font.TRUETYPE_FONT, fontFileInputStream);
Font font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
font = font.deriveFont(Font.PLAIN, 14f);
System.out.println("Enter Kanji");
String string = new String(scan.next());
StringBuffer sb = new StringBuffer(string);
japanese.setFont(baseFont.deriveFont(Font.PLAIN, 24));
japanese.setText(sb.toString());
System.out.println("Enter Romanji");
String Romanji = scan.next();
System.out.println("How common is it");
int common = scan.nextInt();
System.out.println("How many types of word is it?");
int loop = scan.nextInt();
//List<int> typeOfWord = new ArrayList<int>();
ArrayList type = new ArrayList();
for(int i = 0; i<loop;i++){
System.out.println("What type of word");
type.add(scan.nextInt());
}
System.out.println("What type of adjective");
int adjective = scan.nextInt();
System.out.println("What type of verb");
int verb = scan.nextInt();
System.out.println("How many radicals");
int loop2 = scan.nextInt();
ArrayList radical = new ArrayList();
Word word = new Word(sb.toString(),Romanji,common,type,adjective,verb,radical);
word.getKanaKanji();// gives ?????
store(word);
read();
}
public void store(Word word) throws FileNotFoundException, IOException, FontFormatException{
File file = new File("test.doc");
File newfile = new File ("kanji.rtf");
FileOutputStream ofs = new FileOutputStream(newfile);
PrintWriter print = new PrintWriter(ofs);
System.out.println("Add Kanji");
String kanji = scan.next();
print.write(kanji);
print.close();
FileOutputStream outFileStream = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(outFileStream);
oos.writeObject(word);
oos.close();
}
}
当我打开我写的汉字的文件时,它会通过显示一堆问号来做同样的事情。问号的数量与字符数量相加,但如果我使用扫描仪或任何其他方法从用户那里获取文本,它们就不会显示。
答案 0 :(得分:0)
嗯,要在标准输出中打印,请更改netbeans的编码设置或明确创建UTF-8流。
1部分:
第一部分取自答案here
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
public class JavaTest {
public static void main(String[] args) {
try{
PrintStream out = new PrintStream(System.out, true, "UTF-8");
String Kana = "こんにちは";
out.println(kana);
}
catch(Exception e){
e.printStackTrace();
}
}
}
2部分:
好吧,要在JLabel
中显示,请调用JLabel#setFont
方法,将您系统上可用的字体名称传递给日语。有关更多信息,请参阅javadocs
类的Font
。
示例:
JLabel jl=new JLabel();
jl.setFont(new Font(yourFontString,20,20));
jl.setText(Kana);
修改:如果您的Scanner
使用public Scanner(InputStream source,String charsetName)
示例:Scanner scan=new Scanner(System.in,"UTF-8");
修改强>
当我打开我写汉字的文件时,它也是一样的 的事情 显示一堆问号。问号的数量加起来就是字符的数量,但是如果我的话,它们就不会显示出来 使用扫描仪或任何其他 从用户那里获取文本的方法。
您将FileOutputStream
包裹在PrintWriter
中。您可以将其包含在OutputStreamWriter
中,而不是这样做,因为它提供了一种通过其构造函数配置编码的方法。您使用了类似的方法来编写word
对象。
Ex:
File newfile = new File ("kanji.rtf");
FileOutputStream ofs = new FileOutputStream(newfile);
OutputStreamWriter print = new OutputStreamWriter(ofs,YOURCHARSET);
阅读kanji.rtf
文件时,请执行与InputStream
或Scanner
类相反的操作,并使用您用于编写文件的相同字符集。