Sql server 读取配置单元表文件时出现字符编码问题

Sql server 读取配置单元表文件时出现字符编码问题,sql-server,encoding,utf-8,hive,Sql Server,Encoding,Utf 8,Hive,当我试图阅读兽人文件时,我面临着一个令人难以置信的问题。 默认情况下,配置单元orc文件采用“UTF-8”编码,或者至少应该是。 我正在复制ORC文件,并试图用Java读取ORC文件 我能够成功读取文件,尽管它有一些不需要的字符: 在配置单元中查询表时,没有不需要的字符: 有人能帮忙吗? 我尝试过各种格式的解码和编码,如(ISO-8859-1到UTF-8),(UTF-8到ISO-8859-1),(ISO-8859-1到UTF-16)等 编辑: 您好,我正在使用以下java代码读取ORC文件:

当我试图阅读兽人文件时,我面临着一个令人难以置信的问题。 默认情况下,配置单元orc文件采用“UTF-8”编码,或者至少应该是。 我正在复制ORC文件,并试图用Java读取ORC文件

我能够成功读取文件,尽管它有一些不需要的字符:

在配置单元中查询表时,没有不需要的字符:

有人能帮忙吗? 我尝试过各种格式的解码和编码,如(ISO-8859-1到UTF-8),(UTF-8到ISO-8859-1),(ISO-8859-1到UTF-16)等

编辑:

您好,我正在使用以下java代码读取ORC文件:

    import org.apache.hadoop.hive.ql.io.orc.Reader;
import org.apache.hadoop.hive.ql.io.orc.RecordReader;
import org.apache.hadoop.hive.serde2.objectinspector.StructField;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;

public class OrcFormat {
    public static void main(String[] argv)
    {
        System.out.println(System.getProperty("file.encoding").toString());
        System.out.println(Charset.defaultCharset().name());

        try {
            Configuration conf = new Configuration();
            Utils.createFile("C:/path/target","opfile.txt","UTF-8");
            Reader reader = OrcFile.createReader(new Path("C:/input/000000_0"),OrcFile.readerOptions(conf));

            StructObjectInspector inspector = (StructObjectInspector)reader.getObjectInspector();

            List<String> keys = reader.getMetadataKeys();
            for(int i=0;i<keys.size();i++){
                System.out.println("Key:"+keys.get(i)+",Value:"+reader.getMetadataValue(keys.get(i)));
            }


            RecordReader records = reader.rows();
            Object row = null;

            List fields = inspector.getAllStructFieldRefs();
            for(int i = 0; i < fields.size(); ++i) {
                System.out.print(((StructField)fields.get(i)).getFieldObjectInspector().getTypeName() + '\t');

            }
            System.out.println();
            int rCnt=0;
            while(records.hasNext())
            {
                row = records.next(row);
                List value_lst = inspector.getStructFieldsDataAsList(row);
                String out = "";

                for(Object field : value_lst) {
                    if(field != null)
                        out+=field;
                    out+="\t";
                }
                rCnt++;

                out = out+"\n";
                byte[] outA = convertEncoding(out,"UTF-8","UTF-8");
                Utils.writeToFile(outA,"C:/path/target","opfile.txt","UTF-8");
                if(rCnt<10){
                    System.out.println(out);
                    System.out.println(new String(outA));
                }else{
                    break;
                }
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }   

    public static byte[] convertEncoding(String s,String inCharset,String outCharset){
        Charset inC = Charset.forName(inCharset);
        Charset outC = Charset.forName(outCharset);
        ByteBuffer inpBuffer = ByteBuffer.wrap(s.getBytes());
        CharBuffer data = inC.decode(inpBuffer);

        ByteBuffer opBuffer = outC.encode(data);
        byte[] opData = opBuffer.array();
        return opData;
    }
}
import org.apache.hadoop.hive.ql.io.orc.Reader;
导入org.apache.hadoop.hive.ql.io.orc.RecordReader;
导入org.apache.hadoop.hive.serde2.objectinspector.StructField;
导入org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
公共类格式{
公共静态void main(字符串[]argv)
{
System.out.println(System.getProperty(“file.encoding”).toString();
System.out.println(Charset.defaultCharset().name());
试一试{
Configuration conf=新配置();
Utils.createFile(“C:/path/target”、“opfile.txt”、“UTF-8”);
Reader Reader=OrcFile.createReader(新路径(“C:/input/000000_0”)、OrcFile.readerOptions(conf));
StructObjectInspector检查器=(StructObjectInspector)reader.getObjectInspector();
列表键=reader.getMetadataKeys();

对于(int i=0;这似乎是一个Java问题,而不是配置单元问题。您的Java应用程序中似乎没有使用UTF-8,而是使用单字节编码,因此每个其他字节都是“\0”。请添加您的Java代码。我同意这一点,但需要如何解决它的帮助。我正在使用OrcReader读取ORC文件。我添加了我正在使用的java代码。顺便说一句,您的代码可能没问题。-您在创建的文件上的实际外观如何?文本编辑器?是的,记事本++/TextPad。问题是,这些数据被馈送到不支持UTF-8的SQL Server,因此我必须将编码转换为ISO-8895-1,但是我无法删除nul或\0字符。有指针吗?我可以编写请输入一个String.replaceAll(“[^-~\t\r\n]”,但我不认为这是正确的。因此,这篇文章实际上不是关于Hive或Java的,而是关于将UTF-8文本加载到SQL服务器中的……请检查