Java och Unicode

Tråden skapades och har fått 1 svar. Det senaste inlägget skrevs .
1

Jag försöker få den här Java-koden att fungera. Tecken som inte är ute i kanterna på ordet ska stanna kvar men de i mitten ska kastas om. Källkoden är sparad i UTF-8. Terminal är inställd på UTF-8. Jag kompilerar med javac och kör med java. Det fungerar fint men tecken som å,ä och ö rör programmet inte. Kan man lösa det?

import java.util.Random;

public class Test
{
	public static void main(String[] args)
	{
		// Läs in sträng.
		String str = Keyboard.readString();
		// Kasta om tecken.
		str = randomizer(str);
		// Skriv ut strängen.
		System.out.println(str);
	}

	public static String randomizer(String word)
	{
		// Gör iordning för slumpptal.
		Random generator = new Random();
		// Gör om till en char-array.
		char[] letters = word.toCharArray();
		// Stega genom arrayen.
		for(int i=1;i<letters.length-1;i++)
		{
			// Slumpa fram ett tal.
			int x=generator.nextInt(letters.length-2)+1;
			// Byt plats på tecken.
			if(Character.isLetter(letters[i]) && Character.isLetter(letters[x]))
			{
				char temp = letters[i];
				letters[i] = letters[x];
				letters[x] = temp;
			}
		}
		// Skicka tillbaka strängen.
		return new String(letters);
	}
}

Man skulle ju kunna tänka sig att jag ska ta bort raden:

if(Character.isLetter(letters[i]) && Character.isLetter(letters[x]))

Det gör dock bara att jag får flera frågetecken i utskriften då jag använder andra tecken än ASCII.

Jag har löst problemet på ett annat sätt men då måste jag använda antingen Mac OS Roman eller ISO Latin 1. Unicode vore betydligt trevligare.

Keyboard.java

Tack.

Senast redigerat 2006-05-13 00:46
  • Medlem
  • Norrköping
  • 2006-05-13 02:26

För det första är det bra om Javakompilatorn får veta att källkodsfilen är i UTF-8, om du kompilerar från terminalen skriver du:

javac -encoding UTF-8 Test.java

..men det har nog inte så stor betydelse för ditt program här, men om du hårdkodar strängar tex

String s = "Överståthållarämbetet";

är det viktigt.

För det andra måste ditt program skicka UTF-8 via System.out
Ett sätt är att istället för

System.out.println(str);

skriva

try 
{
   System.out.println(new String(str.getBytes("UTF-8")));
}
catch (UnsupportedEncodingException ex) 
{
   throw new RuntimeException("Otroligt nog stödjer inte din JVM UTF-8");
}

och till detta behövs

import java.io.UnsupportedEncodingException;
1
Bevaka tråden