Hallo, das ist Misuda von Ingenieuren. Dieses Mal werde ich beschreiben, dass ich versucht habe, UTF-8 mit Stückliste per CSV-Import zu schreiben und zu lesen!
Bei der Entwicklung eines Geschäftssystems erhalte ich die Anforderung "Ich möchte Daten erstellen!" In einem Stapel. .. .. Zu dieser Zeit denke ich zuerst über den Import mit CSV nach. Das Erstellen einer API kostet die andere Partei auch die Entwicklung.
** Das Problem hier ist, wie man CSV bearbeitet. ** **. Verwenden Sie * Microsoft Excel *? Immerhin ist es einfach zu bearbeiten!
Wenn Sie die Verwendung von * Microsoft Excel * in Betracht ziehen, können Sie diese bearbeiten, indem Sie eine CSV mit Shift-JIS erstellen. Wenn die Datenbank UTF-8 ist, muss der Zeichencode auf der Serverseite konvertiert werden. Wenn dies passiert, ist es ein Kampf mit dem Zeichencode. Um ehrlich zu sein, habe ich keine Lust zu gewinnen.
In einem solchen Fall, wenn es sich um UTF-8 mit Stückliste (Byte Order Mark) handelt, kann es anscheinend mit * Microsoft Excel * ohne verstümmelte Zeichen geöffnet werden!
Dieses Mal generiert JAVA die Datei. Im Fall von UTF-8 ist der Anfang der Datei [0xEF 0xBB 0xBF].
import java.io.*;
import java.util.Arrays;
import java.util.List;
public class Main {
/**
*Erstellen Sie eine CSV-Datei mit Stückliste (Zeichencode ist UTF)-8)
*
* @param
* @return
*/
public static void main(String[] args) {
File file = new File("Dateipfad");
List header = Arrays.asList("Apfel","Mandarine","Banane","Erdbeere","Melone","Traube");
try(FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
PrintWriter writer = new PrintWriter(osw)){
//Stücklistenzuschuss
fos.write(0xef);
fos.write(0xbb);
fos.write(0xbf);
header.forEach(c -> {
writer.print(c);
writer.print(",");
});
} catch (IOException e) {
System.out.println("Fehler beim Generieren der Datei.");
}
}
}
Es ist in Ordnung, wenn die generierte Datei definitiv UTF-8 mit Stückliste ist, aber manchmal nicht. Geben Sie das Urteil ein und lesen Sie.
import java.io.*;
import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.binary.Hex;
public class Main {
/**
*CSV-Datei mit Stückliste lesen (Zeichencode ist UTF-8)
*
* @param
* @return
*/
public static void main(String[] args) {
File file = new File("Dateipfad");
try (FileInputStream fs = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fs, StandardCharsets.UTF_8);
LineNumberReader lnr = new LineNumberReader(isr)) {
//Die erste Zeile
String row = lnr.readLine();
if (row != null && !row.isEmpty()) {
//Holen Sie sich das erste Zeichen
String bom = row.substring(0, 1);
//Konvertieren Sie das erste Zeichen in ein Byte in ein Zeichen(Verwenden Sie die Apache Commons Codec Hex-Klasse)
String bomByte = new String(Hex.encodeHex(bom.getBytes()));
if ("efbbbf".equals(bomByte)) {
//Stückliste beseitigen
row = row.substring(1);
}
System.out.println(row);
}
//Informationen aus der zweiten Zeile aufteilen
} catch (Exception e) {
System.out.println("Fehler beim Lesen der Datei.");
}
}
}
Sowohl MacOS als auch WindowsOS wurden in * Microsoft Excel * geöffnet und waren nicht verstümmelt und konnten bearbeitet werden! Danach denke ich, dass er mit einer Textdatei bearbeitet. Ich frage mich, ob es keine andere Wahl gibt, als es zu unterstützen.
Recommended Posts