14. august 2001 - 09:54
#1
Her er enn liste over de ESCAPE-koder man kan bruge i Java lagt ind i en klasse - prøv at bruge dem, det kan være du får success ad den vej ....
import java.applet.*;
public class UnescapeHtml extends Applet{
// <HTML>
// <TABLE><TR><TD>
// <APPLET CODE=UnescapeHtml.class WIDTH=400 HEIGHT=100>
// </APPLET>
// </HMTL>
public void init(){
add(new java.awt.Label
(unescapeHTML(\" © 2000 Réal Gagnon <real@rgagnon.com>\")));
}
public static final String unescapeHTML(String s){
String [][] escape =
{{ \"<\" , \"<\" } ,
{ \">\" , \">\" } ,
{ \"&\" , \"&\" } ,
{ \""\" , \"\\\"\" } ,
{ \"à\" , \"à\" } ,
{ \"À\" , \"À\" } ,
{ \"â\" , \"â\" } ,
{ \"ä\" , \"ä\" } ,
{ \"Ä\" , \"Ä\" } ,
{ \"Â\" , \"Â\" } ,
{ \"å\" , \"å\" } ,
{ \"Å\" , \"Å\" } ,
{ \"æ\" , \"æ\" } ,
{ \"Æ\" , \"Æ\" } ,
{ \"ç\" , \"ç\" } ,
{ \"Ç\" , \"Ç\" } ,
{ \"é\" , \"é\" } ,
{ \"É\" , \"É\" } ,
{ \"è\" , \"è\" } ,
{ \"È\" , \"È\" } ,
{ \"ê\" , \"ê\" } ,
{ \"Ê\" , \"Ê\" } ,
{ \"ë\" , \"ë\" } ,
{ \"Ë\" , \"Ë\" } ,
{ \"ï\" , \"ï\" } ,
{ \"Ï\" , \"Ï\" } ,
{ \"ô\" , \"ô\" } ,
{ \"Ô\" , \"Ô\" } ,
{ \"ö\" , \"ö\" } ,
{ \"Ö\" , \"Ö\" } ,
{ \"ø\" , \"ø\" } ,
{ \"Ø\" , \"Ø\" } ,
{ \"ß\" , \"ß\" } ,
{ \"ù\" , \"ù\" } ,
{ \"Ù\" , \"Ù\" } ,
{ \"û\" , \"û\" } ,
{ \"Û\" , \"Û\" } ,
{ \"ü\" , \"ü\" } ,
{ \"Ü\" , \"Ü\" } ,
{ \" \" , \" \" } ,
{ \"®\" , \"\\u00a9\" } ,
{ \"©\" , \"\\u00ae\" } ,
{ \"€\" , \"\\u20a0\" } };
int i, j, k, l ;
i = s.indexOf(\"&\");
if (i > -1) {
j = s.indexOf(\";\");
if (j > i) {
// ok this is not most optimized way to
// do it, a StringBuffer would be better,
// this is left as an exercise to the reader!
String temp = s.substring(i , j + 1);
// search in escape[][] if temp is there
k = 0;
while (k < escape.length) {
if (escape[k][0].equals(temp)) break;
else k++;
}
if (k < escape.length) {
s = s.substring(0 , i) + escape[k][1] + s.substring(j + 1);
return unescapeHTML(s); // recursive call
}
}
}
return s;
}
}
/Alexbp - alexbp@post.tele.dk
14. august 2001 - 10:58
#8
Tegnsæt :-)
Java arbejder internt med 16-bit unicode (Har vi hørt!), men skal selvfølgelig konverteres frem og tilbage til platforme, der ikke anvender 16-bit unicode.
afhængig af hvor du efterfølgende vil have resultatet henaf, skal det konverteres derefter. Hvis du f.eks. vil have det ud i en dos prompt, skal du selvfølgelig bruge det tegnsæt, der hører sig til der (Mode Con kommandoen vil fortælle hvilken code page du anvender, standard er vist 850).
Her er en eksempel på konvertering mellem unicode og 850:
public void println(String s) throws UnsupportedEncodingException {
String converted = new String(s.getBytes(\"CP850\"));
System.out.println(converted);
}
CP850 er ikke supporteret direkte i rt.jar, men kræver at du har i18n.jar i brug også. Det er vist nok standard idag (ihvertfald j2se1.3). Til almindelige filer i windows anbefales cp1252, som er windows\' udvidede latin-1 karakterset.
Listen over tegnsæt ligger iøvrigt her under java docs biblioteket:
docs\\guide\\intl\\encoding.doc.html
Kig også på opsætningen af mysql. mht til databaser kan du vælge en af følgende ting:
1 Lave databasens tegnsæt om til unicode
2 Lade javaklasserne konveretere mellem unicode og db tegnsæt
3 Ignorere problemet.
Den sidste kan se lidt barsk ud, men hvis det kun er java, der læser og skriver til DB bliver karakterene korrekt i den sidste ende.