Ga naar inhoud

[Java] Problemen met ASCII-encodering (00-waarde) CORRECTIE


Aanbevolen berichten

Hallo, Volgende code-snippets om mijn probleem te schetsen: //creatie tekst.txt FileOutputStream fos = new FileOutputStream("c:\\tekst.txt"); Writer out = new BufferedWriter(new OutputStreamWriter(fos)); ... // testregels naar bestand schrijven String strTemp = "LIJN1: test lijn 1"; out.write(strTemp); out.writeln; strTemp = "LIJN2: test lijn 2 "; out.write(strTemp); out.writeln; // gedeelte met stringbuffer -> problemen StringBuffer tmp1 = new StringBuffer(); tmp1 = new StringBuffer("LIJN3: test lijn 3"); tmp1.setLength(50); strTemp = tmp1.toString(); out.write(strTemp); out.newLine(); out.close ... PROBLEEM: Eerst dacht ik dat het iets met de DB te maken maar dat was verkeerd. Bij de uitvoer van deze file zie ik dat er 00-waarden voorkomen. (UltraEdit, notepad laat dit toe, dus je merkt het niet maar het is geen pure ascii) Zonder gebruik van een StringBuffer heb ik dat probleem niet. Ik gebruik de stringbuffer omdat de lengte van mijn woorden in m'n tekstbestand een vaste waarde moeten hebben. Weet iemand hoe ik dit kan oplossen? (De woorden komen uit de database, en de file moet een EDI bestand worden.)
Link naar reactie
Ik denk dat hij zo beter werkt: [code:1:27c4432fde]while (rs.next()) { if (rs.getString("employee_name") != null) { tmp1 = new StringBuffer(rs.getString("employee_name")); tmp1.setLength(35); strTemp = tmp1.toString(); out2.write(strTemp); } }[/code:1:27c4432fde] Op de manier waarop jij het doet, stopt ie een lege stringbuffer in de output als rs.getString("employee_name") null is.
Link naar reactie
Ja, daar zit de fout niet. Ik heb m'n probleemstelling gewijzigd omdat ik al iets verder ben. Het gaat om het feit dat ik een vaste lengte geef aan m'n StringBuffer. Dit vult hij op met nullwaarden (00-waarden). Ik gebruik een StringBuffer omdat ik wil dat m'n Strings bij output nr een bestand, een bepaalde lengte hebben. (Dit is nodig voor EDI gegevens)
Link naar reactie
Ok, om het compleet te maken, de oplossing. StringBuffer.setLength(int i); // zorgt ervoor dat mijn toekomstige String exact lengte i heeft. bv. i = 20 als het woord 10 letters bevat, wordt de Stringbuffer-variabele aangevuld met '\u0000' een unicode-Null waarde waarmee je in ASCII niets kan doen. Dus nu doe ik gewoon: tmp1.setLength(20); tmp1 = new StringBuffer("Hoolllaa lijn 3"); strTemp = tmp1.toString().replace('\u0000', '\u0020'); // of ('\u0000', ' ') Voor zij die het ooit nodig zouden hebben... : )
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...