webForumDet fria alternativet

Å-Ä-Ö i regex

10 svar · 1 021 visningar · startad av AG

AGMedlem sedan mars 20001 266 inlägg
#1

Har ett problem.
Skulle vilja göra så att följande kodsnutt fungerar som det är tänkt:

Pattern pd11= Pattern.compile("Ab");
Matcher md11 = pd11.matcher(track2);
track2 = md11.replaceAll("Å");

Men som det är nu översätts det inte riktigt, den förstår inte Å utan skriver ut det som ett kors av nåt slag :)
Antar att jag måste lägga till Latin1-supplement, men vet ej hur jag gör.

tack
Andreas

ViktorMedlem sedan aug. 20021 752 inlägg
#2

Var blir det kors istället för Å? I strängen eller vid utskriften?

/Viktor

AGMedlem sedan mars 20001 266 inlägg
#3

Skriver jag ut strängen så blir det ett kors.

Andreas

ViktorMedlem sedan aug. 20021 752 inlägg
#4

Då låter det som det vanliga DOS problemet, åäö blir alltid konstriga tecken i DOS (Å blir ett kors) eftersom Java använder Unicode för sina tecken.

Jag vet tyvärr inte hur du ska fixa det dock, men det är inget fel i ditt Java program.

/Viktor

AGMedlem sedan mars 20001 266 inlägg
#5

Säker, har lagt till latin1-supplement en annan gång nämligen.

Andreas

ViktorMedlem sedan aug. 20021 752 inlägg
#6

Visst är jag säker, så säker att jag var tvungen att göra ett test program :)

public class Test
{
	public static void main(String argv[])
	{
		System.out.println(replace());
	}

	private static String replace()
	{
		String test="Hello World Ab Ab Ab Ab";
		
		Pattern p = Pattern.compile("Ab"); 
		Matcher m=p.matcher(test);
		return(m.replaceAll("Å"));
	}
}

Resultatet i DOS blev

Hello World ┼ ┼ ┼ ┼

och resultatet i Eclipse blev

Hello World Å Å Å Å

Det är altså inget fel på koden utan på Windows, som vanligt ;)

/Viktor

spangoMedlem sedan juni 20008 205 inlägg
#7

Vill man att det ska visas läsbart i DOS-fönstret kan man göra på följande vis när man startar Java:
C:\foo\bar> java -Dfile.encoding=cp850 DinKlass
Dock måste man i sådana fall ha alla textfiler m.m. som programmet läser in DOS-kodade (eller så får man ange vilken kodning man använder när man öppnar filerna), så det suger ändå. Den mest uppenbara lösningen är förstås att gå över till en miljö där man kan använda en Riktig teckenkodning i terminalfönstren... ;) eller så står man ut med knasiga tecken.

AGMedlem sedan mars 20001 266 inlägg
#8

KOden nedan fungerar ej iaf:

// Hämta variabler
		String track = request.getParameter("track");
		String track2 = "";

		Pattern pd11= Pattern.compile("Ab");
		Matcher md11 = pd11.matcher(track);
		track2 = md11.replaceAll("Å");

		Pattern pd = Pattern.compile("-");
		Matcher md = pd.matcher(request.getParameter("date"));
		String date = md.replaceAll("");

		String race = request.getParameter("race");

// Hämta data från x	
		getTrottingData bean = new getTrottingData();
		String host = "http://www.sida.com/RServlet?datum="+ date +"&bankod="+ track2 + "&action=loppresultat&betType=VP&race="+ race;

Requesten track har värdet Ab, och därför borde track2 ha värdet Å, som sedan inkluderas i strängen host. Men det vill isg inte.

Andreas

ViktorMedlem sedan aug. 20021 752 inlägg
#9

Är det track2 som inte blir Å? Om det är så så tror jag inte att parametern track är Ab, för om den är det så fungerar det perfekt.

public class Test
{
	public static void main(String argv[])
	{

		String track = "Ab";
		String track2 = "";

		Pattern pd11= Pattern.compile("Ab");
		Matcher md11 = pd11.matcher(track);
		track2 = md11.replaceAll("Å");

		String host = "http://www.sida.com/RServlet?datum=&bankod="+ track2 + "&action=loppresultat&betType=VP&race=";
		System.out.println("Host: "+host);
	}
}

Utskrift

Host: http://www.sida.com/RServlet?datum=&bankod=Å&action=loppresultat&betType=VP&race=

Kör en System.out.println på parametern track och försäkradig om att den är Ab (tänk på att regex är case sensitive).

/Viktor

spangoMedlem sedan juni 20008 205 inlägg
#10

AG skrev:

String host = "http://www.sida.com/RServlet?datum="+ date +"&bankod="+ track2 + "&action=loppresultat&betType=VP&race="+ race;

Man ska inte ha åäö i URL:er. Du får koda om eländet:

import java.net.URLEncoder;
...
String host = "http://www.sida.com/RServlet?datum="+ date +"&bankod="+ URLEncoder.encode(track2, "utf-8") + "&action=loppresultat&betType=VP&race="+ race;
AGMedlem sedan mars 20001 266 inlägg
#11

Tack, men det löste sig ändå, vet inte riktigt hur.
För er som vill testa tjänsten:
https://www.mycgiserver.com/~lair
och wap-versionen:
https://www.mycgiserver.com/~lair/wap.jsp

Datan hämtas från ATG, de har sagt ok till att återpublicera deras listor. Så sidorna är dynamiska.

Andreas

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)