HTML 인코딩 문제-“”대신“”문자가 나타남
확실하지 않은 어떤 이유로 든 기존 앱이 잘못 작동하기 시작했습니다. ActivePDF에 의해 PDF 보고서로 변환되는 HTML을 많이 생성합니다.
프로세스는 다음과 같이 작동합니다.
- 교체 할 토큰이있는 DB에서 HTML 템플릿을 가져옵니다 (예 : "~ CompanyName ~", "~ CustomerName ~"등).
- 토큰을 실제 데이터로 교체
- 속성에 HTML 태그 속성 값의 형식을 지정하는 간단한 정규식 함수를 사용하여 HTML을 정리합니다 (ActivePDF의 렌더링 엔진은 속성 값 주위에 작은 따옴표 만 제외하고 따옴표 등을 보장합니다).
- PDF를 작성하는 웹 서비스로 HTML을 전송하십시오.
그 엉망인 어딘가에 HTML 템플릿 (
들) 의 비 공백 공백은 ISO-8859-1로 인코딩되어 브라우저에서 문서를 볼 때 "Â"문자로 잘못 표시됩니다 (FireFox). 이 비 UTF8 문자에 대해 ActivePDF가 푸시합니다.
내 질문 : 문제의 원인을 알지 못하고 조사 할 시간이 없기 때문에 나쁜 문자를 다시 인코딩하거나 찾아서 바꿀 수있는 쉬운 방법이 있습니까? 나는 함께 던진이 작은 기능을 통해 그것을 보내려고했지만
모든 것을 gobbledegook로
바꾸어 아무것도 변경하지 않습니다.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
어떤 아이디어?
편집하다:
좋은 해결책처럼 보이지는 않지만 지금은이 문제를 해결하고 있습니다.
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
그 엉망인 어딘가에서 HTML 템플릿 (들)의 비 공백 공백은 ISO-8859-1로 인코딩되어 "Â"문자로 잘못 표시됩니다.
ISO-8859-1이 아닌 UTF-8로 인코딩됩니다. 비 공백 공백 문자는 ISO-8859-1에서 바이트 0xA0입니다. UTF-8로 인코딩되면 0xC2,0xA0이되며 ISO (8859-1)로 보는 경우 (올바르지 않은 경우)로 나타납니다 "Â "
. 여기에는 눈에 띄지 않는 후행 nbsp가 포함됩니다. 해당 바이트가 없으면 다른 것이 문서를 훼손 한 것이므로 무엇을 더 찾아야합니다.
정규 표현식은 무엇입니까, 템플릿은 어떻게 작동합니까?
문자열이 (올바르게) U + 00A0 NON-BREAKING SPACE 문자로 바뀌면 어딘가에 적절한 HTML 파서가있는 것 같습니다 . 그렇다면 DOM에서 기본적으로 템플릿을 처리하고 ASCII 인코딩을 사용하여 ASCII가 아닌 문자를 문자 참조로 유지하도록 직렬화하도록 요청할 수 있습니다. 또한 HTML 자체에서 정규식 사후 처리를 중단해야 할 수도 있습니다.
어쨌든 지금은 문서에 다음 중 하나를 추가 <head>
하여 브라우저에서 올바르게 보이는지 확인할 수 있습니다.
- HTML4의 경우 :
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
- HTML5의 경우 :
<meta charset="utf-8">
그렇게 한 경우 나머지 문제는 ActivePDF의 결함입니다.
어느 누구도 나와 같은 문제가 있고 문자 집합이 이미 올바른 경우 간단히 다음을 수행하십시오.
- .html 파일 안에 모든 코드를 복사하십시오.
- 메모장 (또는 기본 텍스트 편집기)을 열고 코드를 붙여 넣습니다.
- "파일-> 다른 이름으로 저장"으로 이동
- 파일 이름 "example.html"을 입력하십시오 ( "파일 형식 : 모든 파일 ( . )"선택)
- 인코딩을 UTF-8로 선택
- 저장을 누르면 이전 .html 파일을 삭제할 수 있으며 인코딩이 수정되어야합니다
문제 : POST 요청에서 일부 문자열로 '£' 를 CRM 시스템 으로 보내는 문제에 직면 했지만 CRM에서 GET 호출을 할 때 일부 문자열 내용으로 '£' 를 반환했습니다 . 우리가 분석 한 것은 '£' 가 'Â £' 로 변환되었다는 것 입니다.
분석 : 우리가 연구를 한 후에 발견 한 결함은 POST 호출에서 HttpWebRequest ContentType을 "text / xml" 로 설정하고 GET Call에서는 "text / xml; charset : utf-8"이라는 것 입니다.
솔루션 : 솔루션 의 일부로 POST 요청에 charset : utf-8 을 포함 시켰으며 작동합니다.
필자의 경우 페이지가 UTF-8로 올바르게 인코딩되었다하더라도 nbsp 대신 라틴 십자 기호가 표시되었습니다. 위의 어느 것도 문제를 해결하는 데 도움이되지 않았으며 모두 시도했습니다.
IE (브라우저 특정 CSS 포함)의 글꼴 변경이 도움이되면 Helvetica-Nue를 Arial로 변경하는 본문 글꼴로 사용하여 문제를 해결했습니다.
글쎄, 나는이 웹 사이트 에서도이 문제를 겪었고 HTML 엔트 라이트를 위해 콘텐츠 fetler를 사용자 정의하기 만하면됩니다. 그 전에 더 많은 것을 삭제합니다. 그래서 페이지에 대한 html fiter 또는 구문 분석 기능을 변경하면 효과가 있습니다. 주로 CMS 대부분의 HTML 편집기로 인해 발생합니다. 데이터를 저장하는 방식 으로이 문제가 발생했습니다 (내 경우). 이것이 귀하의 경우에도 도움이되기를 바랍니다.
나는 같은 종류의 문제가 있었다. 분명히 PHP가 utf-8을 인식하지 못하기 때문입니다.
DreamWeaver에서 괜찮아 보이지만 '£'표시가 'Â £'로 계속 표시 될 때 처음으로 머리카락이 찢어졌습니다. 결국 나는 페이지를 직접 볼 경우 슬라이드 쇼와 함께 작동하지만 포함과 함께 사용하지 않을 때 색인 파일과 관련된 링크에 문제가 있음을 기억했습니다 (그러나 그것은 옆에 있습니다. 어쨌든 이것이 이것이 될 수 있을지 궁금했습니다. 비슷한 문제이므로 문제가있는 페이지에 넣는 대신 index.php 파일에 넣으면됩니다.
PHP가 utf-8을 인식하지 못하기 때문입니다.
여기에서 HTML의 모든 특수 문자를 확인할 수 있습니다
'Programing' 카테고리의 다른 글
Node.js REPL에서) (을 사용하여 함수를 호출하는 이유는 무엇입니까? (0) | 2020.05.12 |
---|---|
Git 브랜치 이름에 슬래시 문자 사용 (0) | 2020.05.12 |
이 컨텍스트를 함수에 어떻게 전달합니까? (0) | 2020.05.12 |
원 안에 임의의 점을 생성합니다 (균일하게) (0) | 2020.05.12 |
Git 저장소의 처음 두 커밋을 결합 하시겠습니까? (0) | 2020.05.12 |