Что нового

[Файловая система] UTF-16 в имени файла

IgRo

Знающий
Сообщения
65
Репутация
5
Имеется файловая система NTFS в которой в именах файлов использует UTF-16.
Как сохранить файл в имени которого содержатся символы UTF-16: "диаметр", "/", ":", "1/4" и т.п
Например
Вал Ø20.tiff
Труба G1/4.tiff
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
слеш и двоеточие точно нельзя
 
Автор
I

IgRo

Знающий
Сообщения
65
Репутация
5
Не точно
/ - 002F (а только это)
⁄ - 2044
∕ - 2215
: - 003A (и это)
ː - 02D0
˸ - 02F8
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
IgRo
стандартная С функция fopen на которой построена AutoIt функция, открывает файл по ANSI названию. поэтому надо использовать Unicode версию. я думаю, в WinAPI должна быть такая функция.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
IgRo, посмотрите пример в справке для функции
Код:
_WinAPI_WriteFile()



Добавлено:
Сообщение автоматически объединено:

Кстати, стандартная функция поддерживает юникодовые имена файлов. Другое дело, что SciTe не отображает юникод. Вот пример
Код:
$name = BinaryToString("0x2044221502D002F8", 3)
ConsoleWrite($name)
FileWrite(@ScriptDir & '\' & $name & '.txt', "123456789")
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Код:
$name = 'Вал ' & ChrW(0x00D8) & '20'
FileWrite(@ScriptDir & '\' & $name & '.txt', "текст")
$name = 'Труба G1' & ChrW(0x2044) & '4'
FileWrite(@ScriptDir & '\' & $name & '.txt', "текст")
 
Автор
I

IgRo

Знающий
Сообщения
65
Репутация
5
Имена файлов не должны содержать следующие символы:
*|\:"<>?/
Заменим их аналогами по начертанию Unicode символами
Код:
#include <GUIConstantsEx.au3>
$sFileName='  G1/2   |  М1:2 <Астр> "черный" 2*2=?'
$sFileName=StringReplace ( $sFileName, "*", ChrW(0x02DF))
$sFileName=StringReplace ( $sFileName, "|", ChrW(0x01C0))
$sFileName=StringReplace ( $sFileName, '"', "''")
;\ этому символу в Unocode замены не нашлось "это святое" ;-)
$sFileName=StringReplace ( $sFileName, ":", ChrW(0x02D0))
$sFileName=StringReplace ( $sFileName, "<", ChrW(0x2039))
$sFileName=StringReplace ( $sFileName, ">", ChrW(0x203A))
$sFileName=StringReplace ( $sFileName, "?", ChrW(0x0294))
$sFileName=StringReplace ( $sFileName, "/", " "&ChrW(0x2044))

$hGUI = GUICreate("UniCODE->FileName", 300, 18)
$hInpFileName=GUICtrlCreateInput($sFileName,0,0,300,18)

GUISetState()
While 1
 	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch	
WEnd
 
Верх