mirror of
https://github.com/Icinga/icinga-powershell-framework.git
synced 2026-02-03 04:09:29 -05:00
Merge pull request #739 from Icinga:fearture/adds_support_to_check_file_encoding
Feature: Adds support to check encoding of files Adds support to check the encoding of files to ensure we can properly load them and throw errors for unsupported encoding
This commit is contained in:
commit
6ffc7b71f5
3 changed files with 78 additions and 3 deletions
|
|
@ -21,6 +21,7 @@ Released closed milestones can be found on [GitHub](https://github.com/Icinga/ic
|
|||
|
||||
* [#732](https://github.com/Icinga/icinga-powershell-framework/pull/732) Adds support for TLS 1.3 and improves startup response
|
||||
* [#735](https://github.com/Icinga/icinga-powershell-framework/pull/735) Adds support to provide occuring problem event id's for the Eventlog and corresponding acknowledgement id's, providing an indicator if certain issues are resolved or still present
|
||||
* [#739](https://github.com/Icinga/icinga-powershell-framework/pull/739) Adds support to check the encoding of files to ensure we can properly load them and throw errors for unsupported encoding
|
||||
* [#740](https://github.com/Icinga/icinga-powershell-framework/pull/740) Adds new command `Invoke-IcingaForWindowsRESTApi` for easier API communication
|
||||
* [#742](https://github.com/Icinga/icinga-powershell-framework/pull/742) Adds support for the CPU provider to limit the CPU usage to 100% for each thread
|
||||
|
||||
|
|
|
|||
68
lib/core/installer/tools/Get-FileEncoding.psm1
Normal file
68
lib/core/installer/tools/Get-FileEncoding.psm1
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Determines the encoding of a file.
|
||||
|
||||
.DESCRIPTION
|
||||
The Get-FileEncoding function determines the encoding of a file by examining the file's byte order mark (BOM) or by checking if the file is ASCII or UTF8 without BOM.
|
||||
|
||||
.PARAMETER Path
|
||||
Specifies the path of the file to check.
|
||||
|
||||
.EXAMPLE
|
||||
Get-FileEncoding -Path "C:\path\to\file.txt"
|
||||
Returns the encoding of the specified file.
|
||||
|
||||
.OUTPUTS
|
||||
System.String
|
||||
The function returns a string representing the encoding of the file. Possible values are:
|
||||
- UTF8-BOM: UTF-8 encoding with a byte order mark (BOM).
|
||||
- Unicode: UTF-16 encoding (little-endian).
|
||||
- BigEndianUnicode: UTF-16 encoding (big-endian).
|
||||
- UTF7: UTF-7 encoding.
|
||||
- UTF32: UTF-32 encoding.
|
||||
- UTF8: UTF-8 encoding without a byte order mark (BOM).
|
||||
- ASCII: ASCII encoding.
|
||||
|
||||
.NOTES
|
||||
This function requires PowerShell version 3.0 or later.
|
||||
#>
|
||||
|
||||
function Get-FileEncoding()
|
||||
{
|
||||
param (
|
||||
[string]$Path = ''
|
||||
);
|
||||
|
||||
if ([string]::IsNullOrEmpty($Path) -Or (Test-Path -Path $Path) -eq $FALSE) {
|
||||
Write-IcingaConsoleError 'The specified file "{0}" was not found' -Objects $Path;
|
||||
return $null;
|
||||
}
|
||||
|
||||
$Bytes = Get-Content -Encoding Byte -ReadCount 4 -TotalCount 4 -Path $Path;
|
||||
|
||||
if ($Bytes[0] -eq 0xef -and $Bytes[1] -eq 0xbb -and $Bytes[2] -eq 0xbf) {
|
||||
return 'UTF8-BOM';
|
||||
} elseif ($Bytes[0] -eq 0xff -and $Bytes[1] -eq 0xfe) {
|
||||
return 'Unicode';
|
||||
} elseif ($Bytes[0] -eq 0xfe -and $Bytes[1] -eq 0xff) {
|
||||
return 'BigEndianUnicode';
|
||||
} elseif ($Bytes[0] -eq 0x2b -and $Bytes[1] -eq 0x2f -and $Bytes[2] -eq 0x76) {
|
||||
return 'UTF7';
|
||||
} elseif ($Bytes[0] -eq 0xff -and $Bytes[1] -eq 0xfe -and $Bytes[2] -eq 0x00 -and $Bytes[3] -eq 0x00) {
|
||||
return 'UTF32';
|
||||
} else {
|
||||
# Check if the file is ASCII or UTF8 without BOM
|
||||
$Content = Get-Content -Encoding String -Path $Path;
|
||||
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($content);
|
||||
|
||||
# Check each byte to see if it's outside the ASCII range
|
||||
foreach ($byte in $Bytes) {
|
||||
if ($byte -gt 127) {
|
||||
return 'UTF8';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# This is the default encoding, as UTF8 without BOM could be valid ASCII
|
||||
return 'ASCII';
|
||||
}
|
||||
|
|
@ -39,9 +39,15 @@ function Read-IcingaFileSecure()
|
|||
[System.IO.FileShare]::Read
|
||||
);
|
||||
|
||||
$ReadArray = New-Object Byte[] $FileStream.Length;
|
||||
$UTF8Encoding = New-Object System.Text.UTF8Encoding $TRUE;
|
||||
$FileContent = '';
|
||||
$ReadArray = New-Object Byte[] $FileStream.Length;
|
||||
[bool]$UTF8BOM = $FALSE;
|
||||
|
||||
if ((Get-FileEncoding -Path $File) -eq 'UTF8-BOM') {
|
||||
$UTF8BOM = $TRUE;
|
||||
}
|
||||
|
||||
$UTF8Encoding = New-Object System.Text.UTF8Encoding $UTF8BOM;
|
||||
$FileContent = '';
|
||||
|
||||
while ($FileStream.Read($ReadArray, 0 , $ReadArray.Length)) {
|
||||
$FileContent = [System.String]::Concat($FileContent, $UTF8Encoding.GetString($ReadArray));
|
||||
|
|
|
|||
Loading…
Reference in a new issue