Преобразуйте GB2312 в UTF-8

По крайней мере для Office Open XML (*.xlsx) кодовое имя листа сохраняется в /xl/worksheets/sheet[n].xml как . Поэтому, по крайней мере, используя XSSFSheet, можно получить это, используя низкоуровневый базовый объект org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet.

Пример:

enter image description here

Код:

import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;

class ExcelGetSheetByCodeName {

 private static Sheet getSheetByCodeName(Workbook workbook, String codeName) {
  for (Sheet sheet : workbook) {
   if (sheet instanceof XSSFSheet) {
    XSSFSheet xssfSheet = (XSSFSheet)sheet;
System.out.println(xssfSheet.getCTWorksheet().getSheetPr().getCodeName());
    if (codeName.equals(xssfSheet.getCTWorksheet().getSheetPr().getCodeName())) {
     return xssfSheet;
    }
   } else {
    System.out.println("only XSSF implemented yet");
   }
  }
  return null;
 }

 public static void main(String[] args) throws Exception {

  Workbook workbook = WorkbookFactory.create(new FileInputStream("SAMPLE.xlsx")); 
  Sheet sheet = getSheetByCodeName(workbook, "TheCodeName");

System.out.println("found sheet: " + sheet);

 }
}

Результат:

axel@arichter:~/Dokumente/JAVA/poi/poi-4.0.1$ java -cp .:./*:./lib/*:./ooxml-lib/* ExcelGetSheetByCodeName 
Foo
TheCodeName
found sheet: Name: /xl/worksheets/sheet2.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml

7
задан Jon Tackabury 18 December 2008 в 20:46
поделиться

3 ответа

Можно попробовать этот онлайн-сервис, который использует Открытый исходный код iconv утилита.
Можно также установить Charco, версию командной строки его на машине.

Для GB2312, можно использовать CP936 как кодирование.

Если Вы - разработчик .NET, можно сделать мелкий инструмент, который делает просто это.
Я боролся с этим также и нашел, что было на самом деле просто решить с программной точки зрения.

Все, в чем Вы нуждаетесь, является чем-то вроде этого (я протестировал его, и это работает):

В C#

static void Main(string[] args) {
    string infile = args[0];
    string outfile = args[1];

    using (StreamReader sr = new StreamReader(infile, Encoding.GetEncoding(936))) {
        using (StreamWriter sw = new StreamWriter(outfile, false, Encoding.UTF8)) {
            sw.Write(sr.ReadToEnd());
            sw.Close();
        }
        sr.Close();
    }
}

В VB.Net

Private Shared Sub Main(ByVal args() As String)
    Dim infile As String = args(0)
    Dim outfile As String = args(1)
    Dim sr As StreamReader = New StreamReader(infile, Encoding.GetEncoding(936))
    Dim sw As StreamWriter = New StreamWriter(outfile, false, Encoding.UTF8)
    sw.Write(sr.ReadToEnd)
    sw.Close
    sr.Close
End Sub
7
ответ дан 6 December 2019 в 21:21
поделиться

Я мог бы думать немного слишком простой здесь, но если это - просто этот файл простого текста, Вы могли бы попробовать следующее:

  1. Замените все & &amp;, все < &lt; и все > &gt; (чтобы быть на безопасной стороне)
  2. Предварительно ожидайте следующее к текстовому файлу:

    <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><pre>

  3. Откройте файл в своем любимом браузере

  4. Выберите и скопируйте весь текст
  5. Вставьте его в Блокноте и сохраните как UTF-8.

Вы были бы сделаны с этим, прежде чем Вы, возможно, написали любой код, чтобы сделать преобразование или загрузили любые программы, которые сделают преобразование для Вас.

Конечно, я не на сто процентов уверен, что это будет работать, и Вашему браузеру были бы нужны правильные шрифты и все, но рассмотрение, что Вы работаете с этими видами файлов, я предполагаю, что у Вас уже есть они.

3
ответ дан 6 December 2019 в 21:21
поделиться

ГБ 2312 главным образом совместим с ГБ 18030, таким образом, любой инструмент, который в состоянии иметь дело с последним, должен рассматривать ГБ 2312 правильно также. Существует много инструментов для преобразования ГБ 18030 к UTF-8 (или некоторая другая форма кодирования Unicode), но я не могу рекомендовать никому определенного для Windows, потому что я работаю над Unix. Если Вы желаете написать немного кода, iconv библиотека или ICU, приходит на ум: Вы найдете все данные преобразования легко доступными в этих библиотеках.

Преобразование из ГБ 2312 к UTF-8 абсолютно безопасно и без потерь, Вы не должны волноваться об этом.

2
ответ дан 6 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: