Pipe Zeichen Dekodieren

Hi, ich verschicke vom Client an den Server einen String der ein Pipe Zeichen enthält => ¦
Das Zeichen ist im Parameter myVar gespeichert.
Wenn ich Irgend¦Was¦ verschicke, dann erhalte ich am Server aus dem request Parmeter
Irgend%A6Was%A6.

String encoding = request.getCharacterEncoding(); liefert mir UTF-8.
String a = request.getParameter(“myVar”); liefert Irgend%A6Was%A6.

Wie kann ich die Variable a bearbieten damit ich Irgend¦Was¦ stehen habe?

allgemein gibt es URLDecoder.decode() wenn man wirklich umwandeln muss (es zu vermeiden durch evtl. korrektere Bedienung wäre noch andere Frage)
allerdings sollte es %C2%A6 für Pipe sein

experimentiere auch mit URLEncoder.encode(), da müsste aus Pipe %C2%A6 herauskommen,
wenn du das defensiv selber vor dem Absenden machst, dann kommt es bestimmt auch so beim Empfänger an, für sauberes Decode,
was ansonsten unterwegs passiert…

http://www.utf8-zeichentabelle.de/
http://www.torsten-horn.de/techdocs/ascii.htm


Richtung für manuellen Weg wäre die Vorgehensweise %-Zeichen suchen, zwei Ziffern danach hexadezimal parsen, int als char,
%A6 = 166 ist ja durchaus auch schon der richtige ASCII-Code für Pipe,
aber mit UTF8 oder sonstigen Charset ist immer noch bisschen mehr zu bedenken, Wertebereich ist groß,
korrekter kommen in der API-Methode die Zahlen als Bytes in ein byte[] und dann String-Konstruktor mit Charset

Die Clientseite verschickt z.B. den Text %Spezialzeichen¦%
Testweise verschicke ich dies normal, unescaped und escapded.
Habe nun verschiedene Wege ausprobiert um auf der Serverseite in einer Variable %Spezialzeichen¦% zu speichern.
Allerdings bekomme ich bestenfalls %25Spezialzeichen%A6%25.
**
Wie kann ich aus %25Spezialzeichen%A6%25 wieder %Spezialzeichen¦% machen?**

Clientseite


var o =  "%Spezialzeichen¦%"
var data ="&normal=" + o + "&unescaped=" + unescape(o) + "&escaped=" + escape(o);

Serverseite


				String o1 = request.getParameter("normal");
				String o2 = request.getParameter("unescaped");
				String o3 = request.getParameter("escaped");
				
				System.out.println("------------------------------------------------ Test 1 -----------------------------------------------------------------------------");
				System.out.println("CharacterEncoding: " + request.getCharacterEncoding());
				System.out.println("normal: " + o1);
				System.out.println("unescaped: " + o2);
				System.out.println("escaped: " + o3);
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");
				System.out.println("normal: " + TextTools.getTextParameter(request, "normal"));
				System.out.println("unescaped: " + TextTools.getTextParameter(request, "unescaped"));
				System.out.println("escaped: " + TextTools.getTextParameter(request, "escaped"));
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");
				String o11 = StringEscapeUtils.unescapeJava(o1);
				String o22 = StringEscapeUtils.unescapeJava(o2);
				String o33 = StringEscapeUtils.unescapeJava(o3);
				System.out.println("normal unescape: " + o11);
				System.out.println("unescaped unescape: " + o22);
				System.out.println("escaped unescape: " + o33);
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");
//				try {
//					if (o1 != null) {
//						String o111 = URLDecoder.decode(o1, "UTF-8");
//						System.out.println("normal decode: " + o111);
//					}
//				} catch (UnsupportedEncodingException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				
//				try {
//					if (o2 != null) {
//						String o222 = URLDecoder.decode(o2, "UTF-8");
//						System.out.println("unescaped decode: " + o222);
//					}
//				} catch (UnsupportedEncodingException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//			
//				try {
//					if (o3 != null) {
//						String o333 = URLDecoder.decode(o3, "UTF-8");
//						System.out.println("escaped decode: " + o333);	
//					}
//				} catch (UnsupportedEncodingException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");
//				try {
//					if (o1 != null) {
//						String o1111 = new URLCodec().decode(o1);
//						System.out.println("normal URLCodec: " + o1111);
//					}
//				} catch (DecoderException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				
//				try {
//					if (o2 != null) {
//						String o2222 = new URLCodec().decode(o2);
//						System.out.println("unescaped URLCodec: " + o2222);
//					}
//				} catch (DecoderException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				
//				try {
//					if (o3 != null) {
//						String o3333 = new URLCodec().decode(o3);
//						System.out.println("escaped URLCodec: " + o3333);
//					}
//				} catch (DecoderException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");
				Properties p = new Properties();
				try {
					p.load(new StringReader("o1="+o1));
					String o11111 =  p.getProperty("o1");
					System.out.println("normal Properties: " + o11111);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				try {
					p.load(new StringReader("o2="+o2));
					String o22222 = p.getProperty("o2");
					System.out.println("unescaped Properties: " + o22222);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				try {
					p.load(new StringReader("o3=" +o3));
					String o33333 = p.getProperty("o3");
					System.out.println("escaped Properties: " + p.getProperty("o33333"));
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("-------------------------------------------------------------------------------------------------------------------------------------");

ich denke ich habs nun, deine Erinnerung war in meiner Hinsicht zumindest soweit hilfreich, als dass ich nochmal hineingeschaut habe :wink: :

import java.net.URLEncoder;

public class Test2
{
    public static void main(String[] args)
        throws Exception
    {
        String st = URLEncoder.encode("zei¦chen", "ISO-8859-1");
        System.out.println(st);
        st = URLDecoder.decode(st, "ISO-8859-1");
        System.out.println(st);
    }
}

die ‘Clientseite’ kodiert anscheinend mit ISO-8859-1 oder irgendeinem Charset, welches ¦ nur in %A6, nicht zwei Bytes %C2%A6 darstellt