(StringBuilder sbuf, char ch)
| 1502 | } |
| 1503 | |
| 1504 | private static void appendHex(StringBuilder sbuf, char ch) { |
| 1505 | int firstLiteral = ch / 256; |
| 1506 | int secLiteral = ch % 256; |
| 1507 | if (firstLiteral == 0 && secLiteral < 127) { |
| 1508 | sbuf.append("%"); |
| 1509 | String s = Integer.toHexString(secLiteral).toUpperCase(); |
| 1510 | if (s.length() == 1) { |
| 1511 | sbuf.append("0"); |
| 1512 | } |
| 1513 | sbuf.append(s); |
| 1514 | return; |
| 1515 | } |
| 1516 | if (ch <= 0x07ff) { |
| 1517 | // 2 literals unicode |
| 1518 | firstLiteral = 192 + (firstLiteral << 2) + (secLiteral >> 6); |
| 1519 | secLiteral = 128 + (secLiteral & 63); |
| 1520 | sbuf.append("%"); |
| 1521 | sbuf.append(Integer.toHexString(firstLiteral).toUpperCase()); |
| 1522 | sbuf.append("%"); |
| 1523 | sbuf.append(Integer.toHexString(secLiteral).toUpperCase()); |
| 1524 | } else { |
| 1525 | // 3 literals unicode |
| 1526 | int thirdLiteral = 128 + (secLiteral & 63); |
| 1527 | secLiteral = 128 + ((firstLiteral % 16) << 2) + (secLiteral >> 6); |
| 1528 | firstLiteral = 224 + (firstLiteral >> 4); |
| 1529 | sbuf.append("%"); |
| 1530 | sbuf.append(Integer.toHexString(firstLiteral).toUpperCase()); |
| 1531 | sbuf.append("%"); |
| 1532 | sbuf.append(Integer.toHexString(secLiteral).toUpperCase()); |
| 1533 | sbuf.append("%"); |
| 1534 | sbuf.append(Integer.toHexString(thirdLiteral).toUpperCase()); |
| 1535 | } |
| 1536 | } |
| 1537 | |
| 1538 | /// Converts a relative url e.g.: /myfile.html to an absolute url |
| 1539 | /// |
no test coverage detected