diff --git a/lib/src/package_meta.dart b/lib/src/package_meta.dart index 3258b7fcd1..ffdfe405e9 100644 --- a/lib/src/package_meta.dart +++ b/lib/src/package_meta.dart @@ -4,6 +4,7 @@ library dartdoc.package_meta; +import 'dart:convert'; import 'dart:io'; import 'package:analyzer/dart/element/element.dart'; @@ -14,6 +15,7 @@ import 'package:yaml/yaml.dart'; import 'logging.dart'; Map _packageMetaCache = {}; +Encoding utf8AllowMalformed = new Utf8Codec(allowMalformed: true); Directory get defaultSdkDir { Directory sdkDir = new File(Platform.resolvedExecutable).parent.parent; @@ -212,7 +214,7 @@ class FileContents { factory FileContents(File file) => file == null ? null : new FileContents._(file); - String get contents => file.readAsStringSync(); + String get contents => file.readAsStringSync(encoding: utf8AllowMalformed); bool get isMarkdown => file.path.toLowerCase().endsWith('.md'); diff --git a/test/package_meta_test.dart b/test/package_meta_test.dart index 15b4d4950f..6112aea656 100644 --- a/test/package_meta_test.dart +++ b/test/package_meta_test.dart @@ -7,6 +7,7 @@ library dartdoc.package_utils_test; import 'dart:io'; import 'package:dartdoc/src/package_meta.dart'; +import 'package:path/path.dart' as pathLib; import 'package:test/test.dart'; void main() { @@ -23,6 +24,14 @@ void main() { }); }); + group('PackageMeta for the test package', () { + PackageMeta p = new PackageMeta.fromDir(new Directory(pathLib.join(Directory.current.path, 'testing', 'test_package'))); + + test('readme with corrupt UTF-8 loads without throwing', () { + expect(p.getReadmeContents().contents, contains('Here is some messed up UTF-8.\nÐf')); + }); + }); + group('PackageMeta.fromDir for this package', () { PackageMeta p = new PackageMeta.fromDir(Directory.current); diff --git a/testing/test_package/README.md b/testing/test_package/README.md index 22d04e9e26..9e4d75eb9d 100644 --- a/testing/test_package/README.md +++ b/testing/test_package/README.md @@ -5,6 +5,8 @@ This is an amazing package. +## Here is some messed up UTF-8. +Ðfу�z�‘‰ ## Examples