Files
git.stella-ops.org/src/__Libraries/StellaOps.Canonicalization/Culture/InvariantCulture.cs
StellaOps Bot 83c37243e0 save progress
2026-01-03 11:02:24 +02:00

61 lines
1.9 KiB
C#

using System.Globalization;
using System.Text;
namespace StellaOps.Canonicalization.Culture;
/// <summary>
/// Ensures all string operations use invariant culture.
/// </summary>
public static class InvariantCulture
{
public static IDisposable Scope()
{
var original = CultureInfo.CurrentCulture;
var originalUi = CultureInfo.CurrentUICulture;
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture;
return new CultureScope(original, originalUi);
}
public static int Compare(string? a, string? b) => string.Compare(a, b, StringComparison.Ordinal);
public static string FormatDecimal(decimal value) => value.ToString("G", CultureInfo.InvariantCulture);
public static decimal ParseDecimal(string value) => decimal.Parse(value, CultureInfo.InvariantCulture);
private sealed class CultureScope : IDisposable
{
private readonly CultureInfo _original;
private readonly CultureInfo _originalUi;
public CultureScope(CultureInfo original, CultureInfo originalUi)
{
_original = original;
_originalUi = originalUi;
}
public void Dispose()
{
CultureInfo.CurrentCulture = _original;
CultureInfo.CurrentUICulture = _originalUi;
}
}
}
/// <summary>
/// UTF-8 encoding utilities.
/// </summary>
public static class Utf8Encoding
{
public static string Normalize(string input)
=> Normalize(input, NormalizationForm.FormC);
public static string Normalize(string input, NormalizationForm form)
=> input.Normalize(form);
public static byte[] GetBytes(string input)
=> Encoding.UTF8.GetBytes(Normalize(input));
public static byte[] GetBytes(string input, NormalizationForm form)
=> Encoding.UTF8.GetBytes(Normalize(input, form));
}