2012-02-17 4 views
2

ARC2을 사용하면 텍스트 데이터가 손상됩니다.ARC2 (PHP 시맨틱 웹 라이브러리)가 UTF-8 파일을 UTF-8로 잘못 변환합니다.

내 RDF 입력 파일이 UTF-8 형식입니다. LOAD <path/to/file.rdf> 쿼리를 통해 MySQL 백엔드를 사용하는 ARC2에로드됩니다. MySQL 데이터베이스는 UTF-8로되어 있습니다. PHPMyAdmin을 사용하여 확인하면됩니다.

그러나 텍스트 데이터가 손상됩니다. 몇 가지 변환 확인 후 문제는 원래 UTF-8 파일이 ISO-8859-1로 간주되어 UTF-8로 다시 변환 된 것으로 보입니다.

예 : "surmonté"→ "surmonteÌ".

"surmonteiet"는 데이터베이스에서 UTF-8로 능동적으로 사용할 수 있습니다.

이것은 ARC2가 파일을 열 때 (철저하게 깊지는 않지만 상당히 깊지는 않지만 의심스런 것을 보여주지 않았 음) 또는 PHP와 MySQL에서 좀 더 일반적인 경우 일 수 있습니까?

가져온 데이터를 잘못 인코딩하지 않고 원본으로 가져 오도록하려면 어떻게해야합니까?

+0

ARC2는 파일이나 데이터베이스 연결에 대한 인코딩을 언제든지 지정합니까? 그렇지 않은 경우 문제가 발생한 부분 인 latin1로 기본 설정됩니다. – deceze

+0

@deceze 네, 물론 이것은 제가 처음 체크 한 것입니다. 그리고 명시 적으로 [UTF-8로 데이터베이스와 데이터 정렬을 만듭니다] (https://github.com/semsol/arc2/blob/master/store/ARC2_Store. php # L59). 다음 데이터베이스에 연결할 때 명시 적으로 상태를 나타내지 않지만 그 의미가 있을지 모르겠다 ...? – MattiSG

+0

데이터베이스와 데이터 정렬은 연결 인코딩 없이는 의미가 없습니다. http://kunststube.net/frontback을 참조하십시오. – deceze

답변

1

ARC2는 두 가지 기능, 즉 $store->setUp(), CREATEsTABLEDATABASE을 필요로하는 경우 사용합니다. 및 query(LOAD…, 자세한 질문에.

setUp() 부분은 load 부분과 동일한 스크립트에서 이 아니고이 호출되어야합니다. 적어도 동일한 실행 중에는 아닙니다. 필자가 취한 해결책은 두 개의 개별 스크립트를 만드는 것이 었습니다. 하나는 데이터베이스를 초기화하고 다른 하나는 데이터를로드하는 것이지만, 일단 완료되면 init 부분을 주석 처리하는 것입니다. 어쨌든, 트릭은 초기화 직후 로딩이 일어나지 않는지 확인하는 것입니다.

DB 연결시 인코딩 지정이 SET NAMES utf8인데 이는 after collation detection으로 설정 되었기 때문에 데이터베이스가 방금 생성 된 경우 MySQL이 제대로 감지하지 못하는 것 같습니다. 수정본 pull request을 만들었습니다. 보조 노트로


, 질문의 LOAD <path/to/file.rdf 구조를 사용하는 것이 효율적이지 :이 네트워크를 통해 자체에서 다운로드 할 수있는 서버를 호출, 상대 주소로 계산됩니다.

$store->query('LOAD <file://' . dirname(__FILE__) . '/path/to/file.rdf>')