我需要更新一个非常古老的项目的属性文件,属性文件应该显示阿拉伯字符,但它显示的内容类似于“ÊãÊÓÌíáØáÈßã”,我写了一个简单的程序,我能够从文件中读取正确的阿拉伯语值
Reader r = new InputStreamReader(new FileInputStream("C:\\Labels_ar.properties"), "Windows-1256");
buffered = new BufferedReader(r);
String line;
while ((line = buffered.readLine()) != null) {
System.out.println("line" + line);
}
但您对我如何打开文件,编辑和保存新更改有任何想法吗?
答案 0 :(得分:1)
如果您认为编码是Windows-1256,那么有编辑可以完成这项工作,例如EditPadLite。
如果不是这样,你需要找出的第一件事就是编码。鉴于它是一个属性文件,它可能是UTF-8,但最简单的方法是获取文件的十六进制转储并在此处发布。在Linux下,我通常建议使用:
od -xcb Labels_ar.properties
但是,如果你在Windows上,那就不会那么好了(除非你安装了CygWin)。
所以,如果您有自己喜欢的十六进制转储程序,那就使用它。否则,您可以使用以下Powershell:
function Pf-Dump-Hex-Item([byte[]] $data) {
$left = "+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F"
$right = "0123456789ABCDEF"
Write-Output "======== $left +$right"
$addr = 0
$left = "{0:X8} " -f $addr
$right = ""
# Now go through the input bytes
foreach ($byte in $bytes) {
# Add 2-digit hex number then filtered character.
$left += "{0:x2} " -f $byte
if (($byte -lt 0x20) -or ($byte -gt 0x7e)) { $byte = "." }
$right += [char] $byte
# Increment address and start new line if needed.
$addr++;
if (($addr % 16) -eq 0) {
Write-Output "$left $right"
$left = "{0:X8} " -f $addr
$right = "";
}
}
# Flush last line if needed.
$lastLine = "{0:X8}" -f $addr
if (($addr % 16) -ne 0) {
while (($addr % 16) -ne 0) {
$left += " "
$addr++;
}
Write-Output "$left $right"
}
Write-Output $lastLine
Write-Output ""
}
function Pf-Dump-Hex {
param(
[Parameter (Mandatory = $false, Position = 0)]
[string] $Path,
[Parameter (Mandatory = $false, ValueFromPipeline = $true)]
[Object] $Object
)
begin {
Set-StrictMode -Version Latest
# Create the array to hold content then do path if given.
[byte[]] $bytes = $null
if ($Path) {
$bytes = [IO.File]::ReadAllBytes((Resolve-Path $Path))
Pf-Dump-Hex-Item $bytes
}
}
process {
# Process each object (input/pipe).
if ($object) {
foreach ($obj in $object) {
if ($obj -is [Byte]) {
$bytes = $obj
} else {
$inpStr = [string] $obj
$bytes = [Text.Encoding]::Unicode.GetBytes($inpStr)
}
Pf-Dump-Hex-Item $bytes
}
}
}
}
如果您将其加载到Powershell会话中,请运行:
pf-dump-hex Labels_ar.properties
应该允许您评估文件编码。
答案 1 :(得分:-1)
我认为有两个问题: 1-我不确定System.out.println()是否可以打印阿拉伯字符,所以尝试使用另一种方法,如MessageBox.show(),以确保读取文件有问题。 2-如果MessageBox.show()显示相同的结果,问题应该是charset,你可以尝试使用UTF-8或其他东西。