Непонятно, где ваша проблема с использованием китайских символов происходит, но я не могу воспроизвести ее.
У меня есть следующие книги в Excel:
Следующий простой код:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileInputStream;
class ReadXSSFUnicodeTest {
public static void main(String[] args) {
try {
Workbook wb = WorkbookFactory.create(new FileInputStream("ReadXSSFUnicodeTest.xlsx"));
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
String string = cell.getStringCellValue();
System.out.println(string);
}
}
wb.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
производит:
Если проблема заключается в том, что для Windows это не BLE отображения Unicode символы должным образом в CMD консоли, потому что он не имеет шрифт с глифы для него, а затем записать содержимое в текстовый файл:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileInputStream;
import java.io.Writer;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
class ReadXSSFUnicodeTest {
public static void main(String[] args) {
try {
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("ReadXSSFUnicodeTest.txt"), "UTF-8"));
Workbook wb = WorkbookFactory.create(new FileInputStream("ReadXSSFUnicodeTest.xlsx"));
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
String string = cell.getStringCellValue();
out.write(string + "\r\n");
System.out.println(string);
}
}
out.close();
wb.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Этот файл должен иметь надлежащее содержание даже в Блокноте Windows:
Вы также можете с помощью Свинг (JTextArea), чтобы обеспечить свою собственную зону вывода для тестирования выходов:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileInputStream;
import java.io.Writer;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import javax.swing.*;
import java.awt.*;
class ReadXSSFUnicodeTest {
public ReadXSSFUnicodeTest() {
try {
MySystemOut mySystemOut = new MySystemOut();
Workbook wb = WorkbookFactory.create(new FileInputStream("ReadXSSFUnicodeTest.xlsx"));
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
String string = cell.getStringCellValue();
//System.out.println(string);
mySystemOut.println(string);
}
}
wb.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
ReadXSSFUnicodeTest readXSSFUnicodeTest= new ReadXSSFUnicodeTest();
}
private class MySystemOut extends JTextArea {
private String output = "";
private MySystemOut() {
super();
this.setLineWrap(true);
JFrame frame = new JFrame("My System Outputs");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane areaScrollPane = new JScrollPane(this);
areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
areaScrollPane.setPreferredSize(new Dimension(350, 150));
frame.getContentPane().add(areaScrollPane, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private void println(String output) {
this.output += output + "\r\n";
this.setText(this.output);
this.revalidate();
}
}
}
Это всего лишь самый простой способ и только для получения тестовых результатов, поскольку он использует Swing не в правильном направлении с точки зрения проблем Threading AWT.
Как вы его печатаете? Где вы его печатаете? Каков результат? –
Я напечатал его на консоли с помощью System.out.println (s); - Я попробовал это в своей среде IDE, а затем в окне cmd. Я вижу квадрат с вопросительным знаком. Однако я могу утверждать: эти символы содержат правильную информацию. Я копирую его в редактор и получаю китайские символы из моего файла excel. – blauerschluessel
Windows cmd window? Какой язык/язык/регион вы настроили для сеанса Windows? –