Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过Flex JSON转义非ascii符号_Java_Json_Non Ascii Characters_Flexjson - Fatal编程技术网

Java 通过Flex JSON转义非ascii符号

Java 通过Flex JSON转义非ascii符号,java,json,non-ascii-characters,flexjson,Java,Json,Non Ascii Characters,Flexjson,我有一个java类,它包含简单的字符串字段,其中一些字段可以包含非ascii符号,在JSON序列化期间,这些符号将在\u0000中转换。我知道我可以通过杰克逊做到这一点,但这不能被内在原因所利用 例如Java类 public class SomeClass { String filed1; // getter/setter } 转换代码: public String convert(SomeClass someClass) { new JSONSerializer()

我有一个java类,它包含简单的
字符串
字段,其中一些字段可以包含非ascii符号,在JSON序列化期间,这些符号将在
\u0000
中转换。我知道我可以通过杰克逊做到这一点,但这不能被内在原因所利用

例如Java类

public class SomeClass {
    String filed1;

    // getter/setter
}
转换代码:

public String convert(SomeClass someClass) {
    new JSONSerializer().include( "*" ).serialize(someClass);
}
结果应该是JSON:

{fild1:'\u041F\u0440\u0438\u0432\u0435\u0442'}
而不是

{fild1:'Пример'}

好的,我找到了解决办法。可能对某人有帮助

JSONSerializer serializer = new JSONSerializer().transform( new AbstractTransformer() {
        @Override
        public void transform(Object object) {

            String value = object.toString();
            int len = value.length();
            StringBuilder stringBuilder = new StringBuilder("\"");
            for (int i = 0; i < len; i++) {
                char c = value.charAt( i );
                if (c == '"') {
                    stringBuilder.append( "\\u0022" );
                } else if (c == '&') {
                    stringBuilder.append( "\\u0026" );
                } else if (c == '\'') {
                    stringBuilder.append( "\\u0027" );
                } else if (c == '\\') {
                    stringBuilder.append( "\\\\" );
                } else if (c == '\b') {
                    stringBuilder.append( "\\b" );
                } else if (c == '\f') {
                    stringBuilder.append( "\\f" );
                } else if (c == '\n') {
                    stringBuilder.append( "\\n" );
                } else if (c == '\r') {
                    stringBuilder.append( "\\r" );
                } else if (c == '\t') {
                    stringBuilder.append( "\\t" );
                } else if (c > 127) {
                    stringBuilder.append( "\\u" );
                    int n = c;
                    for (int j = 0; j < 4; ++j) {
                        int digit = (n & 0xf000) >> 12;
                        stringBuilder.append( String.valueOf( JSONSerializer.HEX[digit] ) );
                        n <<= 4;
                    }
                } else {
                    stringBuilder.append( c );
                }
            }
            stringBuilder.append( "\"" );
            getContext().write( stringBuilder.toString() );
        }
    }, String.class );
JSONSerializer serializer=new JSONSerializer().transform(new AbstractTransformer()){
@凌驾
公共空心变换(对象){
字符串值=object.toString();
int len=value.length();
StringBuilder StringBuilder=新的StringBuilder(“\”);
对于(int i=0;i127),则为else{
stringBuilder.append(“\\u”);
int n=c;
对于(int j=0;j<4;++j){
整数位数=(n&0xf000)>>12;
追加(String.valueOf(JSONSerializer.HEX[digit]);
N