압축 파일 라이브러리를 서버에 업로드하면 윈도우즈 컴퓨터에서 파일을 다운로드하여 파일 오류가 발생합니다

1618 단어

문제 설명


회사 백그라운드와 협조하여 zip 압축 파일을 업로드하여 업로드에 성공했지만 맥으로 내관 플랫폼에 로그인하여 zip 파일을 다운로드했습니다. zip 압축을 풀면 파일 번호가 바뀌지 않지만 윈도우즈 컴퓨터로 내관 플랫폼에 로그인하여 zip 파일을 다운로드하고 zip 파일의 압축을 풀면 오류가 발생합니다.

문제 분석

  • 아이폰은 유닉스를 기반으로 한 것으로 윈도우즈와 다르다고 생각하고 서버가 파일을 받아들일 때 인코딩 형식을 수정했는지 연상된다
  • 제3자 라이브러리의 원인으로 인코딩 형식이 정확하지 않습니다

  • 문제를 해결하다

  • 자신과 서버의 디버깅을 통해 서버의 인코딩 형식은 기본 UTF8이지만 윈도우즈 컴퓨터의 기본 인코딩 형식은 GBK의 인코딩 형식입니다. 인코딩 형식이 일치하지 않아 파일의 압축을 풀고 난코딩을 초래합니다
  • mac는 UTF8 인코딩을 지원하기 때문에 압축 파일을 풀면 파일이 혼란스럽지 않습니다
  • 마지막으로 제3자 라이브러리의 인코딩 형식을 보았습니다. 기본 UTF8 인코딩은 파일을 압축할 때 인코딩 형식을 GBK 인코딩 형식으로 수정합니다

  • 코드는 다음과 같습니다.

  • 압축 파일을 생성할 때 문자열의 인코딩을 C 언어의char 형식으로 변환할 때 GBK의 인코딩 형식으로 변환합니다. 코드는 다음과 같습니다
  • // 
    NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    // GBK NSData 
    NSData *data =[fileName dataUsingEncoding:gbkEncoding];
    // 
    const char *cfileName;
    // 
    cfileName = data.bytes;
    
  • 그리고 후속 압축 작업을 진행하여 업로드 작업을 하면 된다

  • 문제

  • 나중에 실제 테스트 과정에서 파일 이름의 접두사에 오류가 생겨 컴퓨터가 파일의 구체적인 유형을 식별할 수 없다는 것을 발견했다
  • 나중에 char의 fileName이 값을 부여할 때 문자열을 잘 식별하지 못하는 것을 분석했다. 즉, 데이터의 길이와char의 길이가 일치하지 않기 때문에 값을 부여할 때 많이 읽을 수 있기 때문에 상기 코드를 코드로 바꾸면 문제가 없을 것이다
  • // 
    NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    // GBK NSData 
    NSData *data =[fileName dataUsingEncoding:gbkEncoding];
    // 
    const char *cfileName = NULL;
    // 
    cfileName = data.bytes;
    
    cfileName[data.length] = '\';
    

    좋은 웹페이지 즐겨찾기