APK hataları

Java'da Excel için ə harfi bozulur

FileWriter dosyayı sistem tablosuyla yazar. Azerbaycan Windows'unda bu çoğu zaman Cp1254'tür. Orada ə yoktur, harf ? olur.

Files.writeString UTF-8 yazar ama başa üç bayt koymaz. Excel o dosyayı yine sistem tablosuyla açabilir. ödəyici o zaman ödÉ™yici gibi görünür.

Başa EF BB BF koy. Cp1254 yazma.

  • CSV'yi yukarıdaki üç baytla yaz. Excel o zaman ə harfini görür.
  • new FileWriter("metn.csv") yazma. Tabloyu kendi seçer ve ə gider.
  • Cp1254 ve windows-1254 harfi saklamaz. UTF-8 dışında tablo seçme.
  • Files.writeString BOM koymaz. Tarayıcı için yeter, Excel için yetmez.
  • Dosyada harf çoktan ? olduysa Java onu geri getirmez. Metni yeniden yaz.
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

byte[] bom = new byte[] {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
byte[] metn = "ad\nAzərbaycan\n".getBytes(StandardCharsets.UTF_8);
byte[] fayl = new byte[bom.length + metn.length];
System.arraycopy(bom, 0, fayl, 0, bom.length);
System.arraycopy(metn, 0, fayl, bom.length, metn.length);
Files.write(Path.of("metn.csv"), fayl);

İlgili rehberler