diff --git a/src/libraries/System.IO.Packaging/tests/ReflectionTests.cs b/src/libraries/System.IO.Packaging/tests/ReflectionTests.cs
new file mode 100644
index 00000000000000..78f080aa6ce782
--- /dev/null
+++ b/src/libraries/System.IO.Packaging/tests/ReflectionTests.cs
@@ -0,0 +1,53 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.IO.Compression;
+using System.Reflection;
+using Xunit;
+
+namespace System.IO.Packaging.Tests;
+
+public class ReflectionTests
+{
+ [Fact]
+ public void Verify_GeneralPurposeBitFlag_NotSetTo_Unicode()
+ {
+ using MemoryStream ms = new();
+
+ using (ZipPackage package = (ZipPackage)Package.Open(ms, FileMode.Create, FileAccess.Write))
+ {
+ Uri uri = PackUriHelper.CreatePartUri(new Uri("document.xml", UriKind.Relative));
+ ZipPackagePart part = (ZipPackagePart)package.CreatePart(uri, Tests.Mime_MediaTypeNames_Text_Xml, CompressionOption.NotCompressed);
+ using (Stream partStream = part.GetStream())
+ {
+ using StreamWriter sw = new(partStream);
+ sw.Write(Tests.s_DocumentXml);
+ }
+ package.CreateRelationship(part.Uri, TargetMode.Internal, "http://packageRelType", "rId1234");
+ }
+
+ ms.Position = 0;
+ using (ZipArchive archive = new ZipArchive(ms, ZipArchiveMode.Read, leaveOpen: false))
+ {
+ foreach (ZipArchiveEntry entry in archive.Entries)
+ {
+ FieldInfo fieldInfo = typeof(ZipArchiveEntry).GetField("_generalPurposeBitFlag", BindingFlags.Instance | BindingFlags.NonPublic);
+ object fieldObject = fieldInfo.GetValue(entry);
+ ushort shortField = (ushort)fieldObject;
+ Assert.Equal(0, shortField); // If it was UTF8, we would set the general purpose bit flag to 0x800 (UnicodeFileNameAndComment)
+ CheckCharacters(entry.Name);
+ CheckCharacters(entry.Comment); // Unavailable in .NET Framework
+ }
+ }
+
+ void CheckCharacters(string value)
+ {
+ for (int i = 0; i < value.Length; i++)
+ {
+ char c = value[i];
+ Assert.True(c >= 32 && c <= 126, $"ZipArchiveEntry name character {c} requires UTF8");
+ }
+ }
+ }
+
+}
diff --git a/src/libraries/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj b/src/libraries/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj
index e5e599929b309e..78bc14a789b086 100644
--- a/src/libraries/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj
+++ b/src/libraries/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj
@@ -5,6 +5,9 @@
+
+
+
diff --git a/src/libraries/System.IO.Packaging/tests/Tests.cs b/src/libraries/System.IO.Packaging/tests/Tests.cs
index 82e36f4d87d809..4d547db5e1c199 100644
--- a/src/libraries/System.IO.Packaging/tests/Tests.cs
+++ b/src/libraries/System.IO.Packaging/tests/Tests.cs
@@ -12,9 +12,9 @@ namespace System.IO.Packaging.Tests
{
public class Tests : FileCleanupTestBase
{
- private const string Mime_MediaTypeNames_Text_Xml = "text/xml";
+ internal const string Mime_MediaTypeNames_Text_Xml = "text/xml";
private const string Mime_MediaTypeNames_Image_Jpeg = "image/jpeg"; // System.Net.Mime.MediaTypeNames.Image.Jpeg
- private const string s_DocumentXml = @"Test";
+ internal const string s_DocumentXml = @"Test";
private const string s_ResourceXml = @"Test";
private FileInfo GetTempFileInfoFromExistingFile(string existingFileName, [CallerMemberName] string memberName = null, [CallerLineNumber] int lineNumber = 0)