Skip to content
Open
4 changes: 4 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Release Notes

## 9.0.0 - May 09 2026

- Change HTTP response default encoding from ISO-8859-1 to UTF-8 to match `System.Net.Http.HttpClient` behaviour (closes #1251)

## 8.1.13 - May 08 2026

- Performance: `HtmlNode.serialize` no longer allocates a temporary `string` on each newline/indentation step; uses `StringBuilder.Append(char, int)` overload directly. `isVoidElement` set is now computed once at module initialisation instead of being re-created on every `HtmlNode.ToString()` call. `HtmlDocument.ToString()` uses a single `StringBuilder` for the whole document instead of `List.map … |> String.Concat`.
Expand Down
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Csv.Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Csv.Core")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Csv.Core"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.DesignTime.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.DesignTime")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.DesignTime"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Html.Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Html.Core")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Html.Core"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Http.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Http")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Http"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Json.Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Json.Core")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Json.Core"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Runtime.Utilities.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Runtime.Utilities")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Runtime.Utilities"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.WorldBank.Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.WorldBank.Core")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.WorldBank.Core"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.Xml.Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data.Xml.Core")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data.Xml.Core"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
8 changes: 4 additions & 4 deletions src/AssemblyInfo.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ open System.Reflection
[<assembly: AssemblyTitleAttribute("FSharp.Data")>]
[<assembly: AssemblyProductAttribute("FSharp.Data")>]
[<assembly: AssemblyDescriptionAttribute("Library of F# type providers and data access tools")>]
[<assembly: AssemblyVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyFileVersionAttribute("8.1.11.0")>]
[<assembly: AssemblyVersionAttribute("9.0.0.0")>]
[<assembly: AssemblyFileVersionAttribute("9.0.0.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "FSharp.Data"
let [<Literal>] AssemblyProduct = "FSharp.Data"
let [<Literal>] AssemblyDescription = "Library of F# type providers and data access tools"
let [<Literal>] AssemblyVersion = "8.1.11.0"
let [<Literal>] AssemblyFileVersion = "8.1.11.0"
let [<Literal>] AssemblyVersion = "9.0.0.0"
let [<Literal>] AssemblyFileVersion = "9.0.0.0"
2 changes: 1 addition & 1 deletion src/FSharp.Data.DesignTime/Csv/CsvProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ type public CsvProvider(cfg: TypeProviderConfig) as this =
+ """</c>.</param>
<param name='CacheRows'>Whether the rows should be caches so they can be iterated multiple times. Defaults to true. Disable for large datasets.</param>
<param name='Culture'>The culture used for parsing numbers and dates. Defaults to the invariant culture.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and to ISO-8859-1 the for HTTP requests, unless <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and for HTTP requests when no <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='ResolutionFolder'>A directory that is used when resolving relative file references (at design time and in hosted execution).</param>
<param name='EmbeddedResource'>When specified, the type provider first attempts to load the sample from the specified resource
(e.g. 'MyCompany.MyAssembly, resource_name.csv'). This is useful when exposing types generated by the type provider.</param>
Expand Down
2 changes: 1 addition & 1 deletion src/FSharp.Data.DesignTime/Html/HtmlProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ type public HtmlProvider(cfg: TypeProviderConfig) as this =
+ String.Join(",", TextConversions.DefaultMissingValues)
+ """</c>.</param>
<param name='Culture'>The culture used for parsing numbers and dates. Defaults to the invariant culture.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and to ISO-8859-1 the for HTTP requests, unless <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and for HTTP requests when no <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='ResolutionFolder'>A directory that is used when resolving relative file references (at design time and in hosted execution).</param>
<param name='EmbeddedResource'>When specified, the type provider first attempts to load the sample from the specified resource
(e.g. 'MyCompany.MyAssembly, resource_name.html'). This is useful when exposing types generated by the type provider.</param>
Expand Down
2 changes: 1 addition & 1 deletion src/FSharp.Data.DesignTime/Json/JsonProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ type public JsonProvider(cfg: TypeProviderConfig) as this =
<param name='SampleIsList'>If true, sample should be a list of individual samples for the inference.</param>
<param name='RootName'>The name to be used to the root type. Defaults to `Root`.</param>
<param name='Culture'>The culture used for parsing numbers and dates. Defaults to the invariant culture.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and to ISO-8859-1 the for HTTP requests, unless `charset` is specified in the `Content-Type` response header.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and for HTTP requests when no `charset` is specified in the `Content-Type` response header.</param>
<param name='ResolutionFolder'>A directory that is used when resolving relative file references (at design time and in hosted execution).</param>
<param name='EmbeddedResource'>When specified, the type provider first attempts to load the sample from the specified resource
(e.g. 'MyCompany.MyAssembly, resource_name.json'). This is useful when exposing types generated by the type provider.</param>
Expand Down
2 changes: 1 addition & 1 deletion src/FSharp.Data.DesignTime/Xml/XmlProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ type public XmlProvider(cfg: TypeProviderConfig) as this =
<param name='SampleIsList'>If true, the children of the root in the sample document represent individual samples for the inference.</param>
<param name='Global'>If true, the inference unifies all XML elements with the same name.</param>
<param name='Culture'>The culture used for parsing numbers and dates. Defaults to the invariant culture.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and to ISO-8859-1 the for HTTP requests, unless <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and for HTTP requests when no <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='ResolutionFolder'>A directory that is used when resolving relative file references (at design time and in hosted execution).</param>
<param name='EmbeddedResource'>When specified, the type provider first attempts to load the sample from the specified resource
(e.g. 'MyCompany.MyAssembly, resource_name.xml'). This is useful when exposing types generated by the type provider.</param>
Expand Down
4 changes: 2 additions & 2 deletions src/FSharp.Data.Http/Http.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1376,8 +1376,8 @@ module HttpEncodings =
/// ISO-8859-1
let PostDefaultEncoding = Encoding.GetEncoding("ISO-8859-1") // http://stackoverflow.com/questions/708915/detecting-the-character-encoding-of-an-http-post-request/708942#708942

/// ISO-8859-1
let ResponseDefaultEncoding = Encoding.GetEncoding("ISO-8859-1") // http://www.ietf.org/rfc/rfc2616.txt
/// UTF-8 (matches System.Net.Http.HttpClient default behaviour; RFC 2616 specifies ISO-8859-1 but modern servers and browsers default to UTF-8)
let ResponseDefaultEncoding = Encoding.UTF8

let internal getEncoding (encodingStr: string) =
match Int32.TryParse(encodingStr, NumberStyles.Integer, CultureInfo.InvariantCulture) with
Expand Down
4 changes: 2 additions & 2 deletions tests/FSharp.Data.Core.Tests/HttpEncodings.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ let ``HttpEncodings.PostDefaultEncoding returns ISO-8859-1`` () =
HttpEncodings.PostDefaultEncoding.WebName |> should equal "iso-8859-1"

[<Test>]
let ``HttpEncodings.ResponseDefaultEncoding returns ISO-8859-1`` () =
HttpEncodings.ResponseDefaultEncoding.WebName |> should equal "iso-8859-1"
let ``HttpEncodings.ResponseDefaultEncoding returns UTF-8`` () =
HttpEncodings.ResponseDefaultEncoding.WebName |> should equal "utf-8"

[<Test>]
let ``HttpEncodings.getEncoding with valid encoding name works`` () =
Expand Down
Loading