Converting byte array to String (Java)

前端 未结 7 952
不知归路
不知归路 2020-11-28 06:29

I\'m writing a web application in Google app Engine. It allows people to basically edit html code that gets stored as an .html file in the blobstore.

I\

相关标签:
7条回答
  • 2020-11-28 06:56

    You can try this.

    String s = new String(bytearray);
    
    0 讨论(0)
  • 2020-11-28 07:00

    The byte array contains characters in a special encoding (that you should know). The way to convert it to a String is:

    String decoded = new String(bytes, "UTF-8");  // example for one encoding type
    

    By The Way - the raw bytes appear may appear as negative decimals just because the java datatype byte is signed, it covers the range from -128 to 127.


    -109 = 0x93: Control Code "Set Transmit State"
    

    The value (-109) is a non-printable control character in UNICODE. So UTF-8 is not the correct encoding for that character stream.

    0x93 in "Windows-1252" is the "smart quote" that you're looking for, so the Java name of that encoding is "Cp1252". The next line provides a test code:

    System.out.println(new String(new byte[]{-109}, "Cp1252")); 
    
    0 讨论(0)
  • 2020-11-28 07:03

    The previous answer from Andreas_D is good. I'm just going to add that wherever you are displaying the output there will be a font and a character encoding and it may not support some characters.

    To work out whether it is Java or your display that is a problem, do this:

        for(int i=0;i<str.length();i++) {
            char ch = str.charAt(i);
            System.out.println(i+" : "+ch+" "+Integer.toHexString(ch)+((ch=='\ufffd') ? " Unknown character" : ""));
        }
    

    Java will have mapped any characters it cannot understand to 0xfffd the official character for unknown characters. If you see a '?' in the output, but it is not mapped to 0xfffd, it is your display font or encoding that is the problem, not Java.

    0 讨论(0)
  • 2020-11-28 07:04

    Java 7 and above

    You can also pass your desired encoding to the String constructor as a Charset constant from StandardCharsets. This may be safer than passing the encoding as a String, as suggested in the other answers.

    For example, for UTF-8 encoding

    String bytesAsString = new String(bytes, StandardCharsets.UTF_8);
    
    0 讨论(0)
  • 2020-11-28 07:04
    public static String readFile(String fn)   throws IOException 
    {
        File f = new File(fn);
    
        byte[] buffer = new byte[(int)f.length()];
        FileInputStream is = new FileInputStream(fn);
        is.read(buffer);
        is.close();
    
        return  new String(buffer, "UTF-8"); // use desired encoding
    }
    
    0 讨论(0)
  • 2020-11-28 07:10
    public class Main {
    
        /**
         * Example method for converting a byte to a String.
         */
        public void convertByteToString() {
    
            byte b = 65;
    
            //Using the static toString method of the Byte class
            System.out.println(Byte.toString(b));
    
            //Using simple concatenation with an empty String
            System.out.println(b + "");
    
            //Creating a byte array and passing it to the String constructor
            System.out.println(new String(new byte[] {b}));
    
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            new Main().convertByteToString();
        }
    }
    

    Output

    65
    65
    A
    
    0 讨论(0)
提交回复
热议问题