Ignore:
Timestamp:
26.06.2008 19:50:30 (4 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.