Java 如何从mysql中包含意大利语、日语和俄语字符的a表中正确获取数据

Java 如何从mysql中包含意大利语、日语和俄语字符的a表中正确获取数据,java,mysql,utf-8,character-encoding,special-characters,Java,Mysql,Utf 8,Character Encoding,Special Characters,我有一张UTF8字符集的桌子。这些列被视为utf8\u general\u ci。我正在使用准备好的语句读取数据,但它们没有正确显示。表中的数据也不可读。我需要以人类可读的方式编写代码。我测试过许多方法,但都失败了。 对于我使用的连接属性“?useUnicode=true&characterEncoding=UTF8” 我在我的表格中看到类似“名;古;屋;市;”的内容,但我需要像这样读或写它们名古屋市. 有什么建议我可以处理这个让我头疼的问题吗?

我有一张UTF8字符集的桌子。这些列被视为utf8\u general\u ci。我正在使用准备好的语句读取数据,但它们没有正确显示。表中的数据也不可读。我需要以人类可读的方式编写代码。我测试过许多方法,但都失败了。 对于我使用的连接属性“?useUnicode=true&characterEncoding=UTF8”

我在我的表格中看到类似“名;古;屋;市;”的内容,但我需要像这样读或写它们名古屋市. 有什么建议我可以处理这个让我头疼的问题吗?
提前感谢一百万

也许是resultset.getString(“城市”)你这里有什么问题。您已经收到字符串形式的数据。该字符串的字节表示形式可能不是utf-8。结果集的类型是什么

是否确实使用
characterEncoding=utf8
打开了数据库连接?您需要设置
connectionProperties=“useucode=yes;characterEncoding=utf8;”


首先检查resultset.getBytes(..)而不是getString可能会有所帮助

最后我找到了代码:

public static String unescapeXML( final String xml )
{
    Pattern xmlEntityRegex = Pattern.compile( "&(#?)([^;]+);" );
    // Matcher requires a StringBuffer instead of a StringBuilder
    StringBuffer unescapedOutput = new StringBuffer( xml.length() );

    Matcher m = xmlEntityRegex.matcher( xml );
    Map<String,String> builtinEntities = null;
    String entity;
    String hashmark;
    String ent;
    int code;
    while ( m.find() ) {
        ent = m.group(2);
        hashmark = m.group(1);
        if ( (hashmark != null) && (hashmark.length() > 0) ) {
            code = Integer.parseInt( ent );
            entity = Character.toString( (char) code );
        } else {
            //must be a non-numerical entity
            if ( builtinEntities == null ) {
                builtinEntities = buildBuiltinXMLEntityMap();
            }
            entity = builtinEntities.get( ent );
            if ( entity == null ) {
                //not a known entity - ignore it
                entity = "&" + ent + ';';
            }
        }
        m.appendReplacement( unescapedOutput, entity );
    }
    m.appendTail( unescapedOutput );

    return unescapedOutput.toString();
}

private static Map<String,String> buildBuiltinXMLEntityMap()
{
    Map<String,String> entities = new HashMap<String,String>(10);
    entities.put( "lt", "<" );
    entities.put( "gt", ">" );
    entities.put( "amp", "&" );
    entities.put( "apos", "'" );
    entities.put( "quot", "\"" );
    return entities;
}
公共静态字符串unescapeXML(最终字符串xml)
{
Pattern xmlEntityRegex=Pattern.compile(&(#?)([^;]+);”;
//Matcher需要StringBuffer而不是StringBuilder
StringBuffer unescapedOutput=新的StringBuffer(xml.length());
Matcher m=xmlEntityRegex.Matcher(xml);
映射内置项=null;
字符串实体;
字符串哈希标记;
弦耳鼻咽喉;
int代码;
while(m.find()){
ent=m组(2);
hashmark=m组(1);
if((hashmark!=null)&&(hashmark.length()>0)){
代码=整数.parseInt(ent);
实体=Character.toString((char)代码);
}否则{
//必须是非数字实体
if(内置项==null){
Builtineties=buildBuiltinXMLEntityMap();
}
实体=内置项.get(ent);
if(实体==null){
//不是已知实体-忽略它
实体=“&”+ent+”;
}
}
m、 附录替换(unescapedOutput,实体);
}
m、 附录尾(unescapedOutput);
返回unescapedOutput.toString();
}
私有静态映射BuildinxMLEntityMap()
{
映射实体=新的HashMap(10);
实体。put(“lt”,“lt”);
实体。看跌期权(“amp”、“amp”);
实体。卖出期权(“apos”、“”);
实体。put(“quot”,“\”);
返回实体;
}
某些东西(而不是MySQL)正在生成“html实体”,如
名;
。找到这些实体的来源并撤消它


由于这些实体可能已经存储在表中,因此也需要撤消该操作。

ResultSet ResultSet=ps.executeQuery();您的意思是:byte[]city=rs.getBytes(“city”);String value=new String(city,StandardCharsets.UTF_8);即使这样也不起作用
public static String unescapeXML( final String xml )
{
    Pattern xmlEntityRegex = Pattern.compile( "&(#?)([^;]+);" );
    // Matcher requires a StringBuffer instead of a StringBuilder
    StringBuffer unescapedOutput = new StringBuffer( xml.length() );

    Matcher m = xmlEntityRegex.matcher( xml );
    Map<String,String> builtinEntities = null;
    String entity;
    String hashmark;
    String ent;
    int code;
    while ( m.find() ) {
        ent = m.group(2);
        hashmark = m.group(1);
        if ( (hashmark != null) && (hashmark.length() > 0) ) {
            code = Integer.parseInt( ent );
            entity = Character.toString( (char) code );
        } else {
            //must be a non-numerical entity
            if ( builtinEntities == null ) {
                builtinEntities = buildBuiltinXMLEntityMap();
            }
            entity = builtinEntities.get( ent );
            if ( entity == null ) {
                //not a known entity - ignore it
                entity = "&" + ent + ';';
            }
        }
        m.appendReplacement( unescapedOutput, entity );
    }
    m.appendTail( unescapedOutput );

    return unescapedOutput.toString();
}

private static Map<String,String> buildBuiltinXMLEntityMap()
{
    Map<String,String> entities = new HashMap<String,String>(10);
    entities.put( "lt", "<" );
    entities.put( "gt", ">" );
    entities.put( "amp", "&" );
    entities.put( "apos", "'" );
    entities.put( "quot", "\"" );
    return entities;
}