Ignore:
Timestamp:
2008-06-26T19:50:30+02:00 (16 years ago)
Author:
framm
Message:
  • patch for usernames with international characters. please revert this immediately if it causes any trouble. submitted by danilo@….
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/Base64.java

    r627 r662  
    22package org.openstreetmap.josm.tools;
    33
     4import java.nio.ByteBuffer;
     5
    46public class Base64 {
    57
    6         private static String enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
     8    private static String enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    79
    8         public static String encode(String s) {
    9                 StringBuilder out = new StringBuilder();
    10                 for (int i = 0; i < (s.length()+2)/3; ++i) {
    11                         int l = Math.min(3, s.length()-i*3);
    12                         String buf = s.substring(i*3, i*3+l);
     10    public static String encode(String s) {
     11        StringBuilder out = new StringBuilder();
     12        for (int i = 0; i < (s.length()+2)/3; ++i) {
     13            int l = Math.min(3, s.length()-i*3);
     14            String buf = s.substring(i*3, i*3+l);
    1315            out.append(enc.charAt(buf.charAt(0)>>2));
    14             out.append(enc.charAt((buf.charAt(0) & 0x03) << 4 | (l==1?0:(buf.charAt(1) & 0xf0) >> 4)));
     16            out.append(enc.charAt(
     17                                  (buf.charAt(0) & 0x03) << 4 |
     18                                  (l==1?
     19                                   0:
     20                                   (buf.charAt(1) & 0xf0) >> 4)));
    1521            out.append(l>1?enc.charAt((buf.charAt(1) & 0x0f) << 2 | (l==2?0:(buf.charAt(2) & 0xc0) >> 6)):'=');
    1622            out.append(l>2?enc.charAt(buf.charAt(2) & 0x3f):'=');
    17                 }
    18                 return out.toString();
    19         }
     23        }
     24        return out.toString();
     25    }
     26
     27    public static String encode(ByteBuffer s) {
     28        StringBuilder out = new StringBuilder();
     29        // Read 3 bytes at a time.
     30        for (int i = 0; i < (s.limit()+2)/3; ++i) {
     31            int l = Math.min(3, s.limit()-i*3);
     32            int byte0 = s.get() & 0xff;
     33            int byte1 = l>1? s.get() & 0xff : 0;
     34            int byte2 = l>2? s.get() & 0xff : 0;
     35
     36            out.append(enc.charAt(byte0>>2));
     37            out.append(enc.charAt(
     38                                  (byte0 & 0x03) << 4 |
     39                                  (l==1?
     40                                   0:
     41                                   (byte1 & 0xf0) >> 4)));
     42            out.append(l>1?enc.charAt((byte1 & 0x0f) << 2 | (l==2?0:(byte2 & 0xc0) >> 6)):'=');
     43            out.append(l>2?enc.charAt(byte2 & 0x3f):'=');
     44        }
     45        return out.toString();
     46    }
    2047}
Note: See TracChangeset for help on using the changeset viewer.