diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/AbstractExternalFilter.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/AbstractExternalFilter.java
index f39ec3fa35d8..6c9db5b43234 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/AbstractExternalFilter.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/AbstractExternalFilter.java
@@ -69,6 +69,7 @@ public abstract class AbstractExternalFilter {
@NonNls private static final String DT = "
";
private static final Pattern CHARSET_META_PATTERN =
Pattern.compile("", Pattern.CASE_INSENSITIVE);
+ private final HttpConfigurable myHttpConfigurable = HttpConfigurable.getInstance();
protected static abstract class RefConvertor {
private final Pattern mySelector;
@@ -209,6 +210,10 @@ public abstract class AbstractExternalFilter {
}
protected void doBuildFromStream(String surl, Reader input, StringBuffer data) throws IOException {
+ doBuildFromStream(surl, input, data, true);
+ }
+
+ protected void doBuildFromStream(String surl, Reader input, StringBuffer data, boolean search4Encoding) throws IOException {
BufferedReader buf = new BufferedReader(input);
Matcher anchorMatcher = ourAnchorsuffix.matcher(surl);
@NonNls String startSection = "";
@@ -225,20 +230,30 @@ public abstract class AbstractExternalFilter {
data.append(HTML);
String read;
- String charset = null;
+ String contentEncoding = null;
do {
read = buf.readLine();
- /*if (read != null && read.contains("charset")) {
- charset = read;
- }*/
+ if (read != null && search4Encoding && read.contains("charset")) {
+ String foundEncoding = parseContentEncoding(read);
+ if (foundEncoding != null) {
+ contentEncoding = foundEncoding;
+ }
+ }
}
while (read != null && read.toUpperCase().indexOf(startSection) == -1);
- if (input instanceof MyReader && charset != null) {
- String contentEncoding = parseContentEncoding(charset);
- if (contentEncoding != null) { //restart page parsing with correct encoding
- input = new MyReader(((MyReader)input).getInputStream(), contentEncoding);
- buf = new BufferedReader(input);
+ if (input instanceof MyReader && contentEncoding != null) {
+ if (contentEncoding != null && !contentEncoding.equals("UTF-8") && !contentEncoding.equals(((MyReader)input).getEncoding())) { //restart page parsing with correct encoding
+ Reader stream;
+ try {
+ stream = getReaderByUrl(surl, myHttpConfigurable, new ProgressIndicatorBase());
+ }
+ catch (ProcessCanceledException e) {
+ return;
+ }
+ data.delete(0, data.length());
+ doBuildFromStream(surl, new MyReader(((MyReader)stream).getInputStream(), contentEncoding), data, false);
+ return;
}
}