約 2,341,734 件
https://w.atwiki.jp/alpha/pages/14.html
https://w.atwiki.jp/sugawara/pages/113.html
Mac OS X Tips ZDNet Japan builderの記事「開発環境「Xcode Tools」付属の差分表示ツール「FileMerge」をUTF-8対応に」より http //builder.japan.zdnet.com/sp/snow-leopard-09/story/0,3800100196,20404333,00.htm PreferencesのFiltersに /usr/bin/iconv -c -f UTF-8 -t SJIS $(FILE) をセットする。
https://w.atwiki.jp/fumiduki1985/pages/195.html
codecsモジュールを使用して、文字コードを指定してファイルオブジェクトを作成すれば可能。 記述例: import codecs file = codecs.open( test.txt , w , utf-8-sig ) # utf-8-sig はBOM付きUTF8を表す # ファイルオブジェクトへの書き込み file.close() このページのタグ一覧 Python プログラミング
https://w.atwiki.jp/abwiki/pages/58.html
UTF82SJIS http //blog.goo.ne.jp/xmldtp/e/7eaeeb3dabfe975dbc57f73aefb1c059からコピペ #N88BASIC Function utf8ToSjis(utf8 As *Byte) As *Byte Dim utf16 As *Word [[Dim]] wlen As Long Dim sjis As *Byte utf8ToSjis = NULL If utf8 = NULL Then Exit Function [[End]] If '==============================' 'UTF8=>UTF16変換 ' '==============================' 'まずは、wlenの長さをとる wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0) If wlen = 0 Then Exit Function End If 'utf16の領域確保 utf16 = calloc(wlen + 1) If utf16 = NULL Then Exit Function End If 'utf16変換 If MultiByteToWideChar(CP_UTF8, 0, utf8, -1, utf16, wlen) = 0 Then free(utf16) Exit Function End If '==============================' 'UTF16=>ShiftJIS変換 ' '==============================' 'まずは、長さを取得 Dim mlen As Long mlen = WideCharToMultiByte(CP_ACP,0,utf16,-1,NULL,0," ",NULL) If mlen = 0 Then free(utf16) Exit Function End If '領域確保 sjis = calloc(mlen + 1) If sjis = NULL Then free(utf16) Exit Function End If 'utf16変換 If WideCharToMultiByte(CP_ACP,0,utf16,-1,sjis,mlen," ",NULL) = 0 Then free(utf16) free(sjis) Exit Function End If free(utf16) utf8ToSjis = sjis End Function Dim utf8[1000] As Byte Dim sjis As *Byte Dim hF As HANDLE Dim r As DWord hF = CreateFile("utf8.txt", GENERIC_READ,0,ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0) ReadFile(hF, utf8,1000, Varptr(r),ByVal 0) sjis = utf8ToSjis(utf8) [[Print]] [[MakeStr]](sjis) CloseHandle(hF) free(sjis) [[Input]] sjis WinAPIを使うべき処理 ShiftJIS→Unicode(UCS-2)変換 MultiByteToWideChar関数を使う。 MultiByteToWideChar(外部ページ) に詳しい。誰かコピーして。 Unicode(UCS-2)→ShiftJIS変換 WideCharToMultiByte関数を使う。 WideCharToMultiByte(外部ページ) に詳しい。誰かコピーして。 WinAPIを使わなくてもプログラム側で簡単に変換できるもの ShiftJIS→EUC-JP変換 ShiftJISとEUC-JPはエンコードが違うだけで同じ符号体系を用いている。その為、この変換は比較的容易い。 Sub SJIS2EUCJP(src As *Byte,dst As *Byte) Dim is=0 As Long,id=0 As Long Do If src[is]=0 then dst[id]=0 Exit Do Else If src[is] H80 then dst[id]=src[is] is++ id++ Else If ( HA1 =src[is]) And (src[is] = HDF) then dst[id]= H8E dst[id+1]=src[is] is++ id+=2 Else Dim a As Long,b As Long b=src[is+1]- H3F If b=0 then dst[id]=0 Exit Do End If If b 63 then b-- a=src[is]*2- H101 If a 62 then a-=128 If b 94 then b-=94 a++ End If If (a 1) Or (94 a) Or (b 1) Or (94 b) then dst[id]=0 Exit Do End If dst[id]=a+ HA0 dst[id+1]=b+ HA0 is+=2 id+=2 End If Loop End Sub EUC-JP→ShiftJIS変換 Sub EUCJP2SJIS(src As *Byte,dst As *Byte) Dim is=0 As Long,id=0 As Long Do If src[is]=0 then dst[id]=0 Exit Do Else If src[is] H80 then dst[id]=src[is] is++ id++ Else If src[is]= H8E then dst[id]=src[is+1] is+=2 id++ Else If src[is]= H8F then'JIS X 0212-1990文字集合だが、Shift-JISには無いため?で代用する。 dst[id]=[[Asc]]("?") is+=3 id++ Else Dim a As Long,b As Long a=src[is]- HA0 b=src[is+1]- HA0 If (a 1) Or (94 a) Or (b 1) Or (94 b) then dst[id]=0 Exit Do End If a-- If a and 1 then a-- b+=94 End If a=(a 1)+ H81 If b 63 then b++ If a H9F then a+=64 dst[id]=a dst[id+1]=b+ H3F is+=2 id+=2 End If Loop End Sub Unicode(UCS-2)→Unicode(UTF-8)変換 UCS-2とUTF-8はエンコードが違うだけで同じ符号体系を用いている。その為、この変換は比較的容易い。 Sub UCS22UTF8(src As *Byte,dst As *Byte) Dim is=2 As Long,id=0 As Long Dim fBE As Long If (src[0]= HFF) and (src[1]= HFE) then'BOM fBE=0 Else If (src[0]= HFE) and (src[1]= HFF) then fBE=1 Else'default=Big Endian(RFC 2781) fBE=1 is-=2 End If Do If src[is]=0 And src[is+1]=0 then dst[id]=0 Exit Do Else Dim c As Long c=src[is+(1-fBE)] As Long*256+src[is+fBE] If c H80 then dst[id]=c id++ Else If c H800 then dst[id]= HC0 Or (c 6) dst[id+1]= H80 Or (c and H3F) id+=2 Else If c H10000 then dst[id]= HE0 Or (c 12) dst[id+1]= H80 Or ((c 6) and H3F) dst[id+2]= H80 Or (c and H3F) id+=3 Else dst[id]=0 Exit Do End If is+=2 End If Loop End Sub Unicode(UTF-8)→Unicode(UCS-2) Sub UTF82UCS2(src As *Byte,dst As *Byte) Dim is=0 As Long,id=2 As Long If (src[0]= HEF) And (src[1]= HBB) And (src[2]= HBF) then is+=3 dst[0]= HFE dst[1]= HFF Do If src[is]=0 then dst[id]=0 Exit Do Else Dim c As Long If src[is] H80 then c=src[is] is++ Else If src[is] HE0 then If src[is+1]=0 then dst[id]=0 Exit Do Else c=((src[is] And H1F) 6) Or (src[is+1] And H3F) is+=2 End If Else If src[is] HF0 then If src[is+1]=0 then dst[id]=0 Exit Do Else If src[is+2]=0 then dst[id]=0 Exit Do Else c=((src[is] And H0F) 12) Or ((src[is+1] And H3F) 6) Or (src[is+2] And H3F) is+=3 End If Else If src[is] HF8 then If src[is+1]=0 then dst[id]=0 Exit Do Else If src[is+2]=0 then dst[id]=0 Exit Do Else If src[is+3]=0 then dst[id]=0 Exit Do Else c=((src[is] And H03) 18) Or ((src[is+1] And H3F) 12) Or ((src[is+2] And H3F) 6) Or (src[is+3] And H3F) is+=4 End If Else dst[id]=0 Exit Do End If If c H10000 then'UCS2には拡張領域が無いため表現できない。 dst[id]=0 dst[id+1]=Asc("?") id+=2 Else dst[id]=c 8 dst[id+1]=c And HFF id+=2 End If End If Loop End Sub nkf32を使って nkf32は文字コードの各種変換を行う便利ライブラリ。 DLLとして提供されていて、使い易くなってる。 ABも実はこれを使っている。SubOperationフォルダーを参照。 使い方は結構簡単で、例えば次のようにするだけで、何らかの文字コードのファイルをEUCに変換してくれる。 #N88BASIC'宣言Declare Sub GetNkfVersion Lib "Nkf32.dll" (verStr As *Byte)Declare Function SetNkfOption Lib "Nkf32.dll" (optStr As *Byte) As LongDeclare Sub NkfConvert Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Declare Sub ToHankaku Lib "Nkf32.dll" (inStr As *Byte)Declare Sub ToZenkakuKana Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Declare Sub ToMime Lib "Nkf32.dll" Alias "EncodeSubject" (outStr As *Byte, inStr As *Byte)Declare Sub EncodeSubject Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Dim vstr[478] As ByteDim in As *ByteDim out As *ByteDim size As DWordGetNkfVersion(vstr)Print "nkf32のバージョン→" MakeStr(vstr)in = LoadFile(VarPtr(size))If in And size Then Print "読み取りOK" Else EndIf SetNkfOption("-e") = 0 Then Print "EUCに変換します"out = calloc(size+1)NkfConvert(out, in)SaveFile(out, lstrlen(out))Print "おわり"End'ファイルを開いて中身を返すFunction LoadFile(sss As *Long) As *ByteDim ofn As OPENFILENAMEDim buffer[333] As Byteofn.lStructSize=SizeOf(OPENFILENAME)ofn.hwndOwner=GetActiveWindow()ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0"ofn.nFilterIndex=1ofn.lpstrFile=bufferofn.nMaxFile=333ofn.lpstrTitle="ファイルを開く"ofn.Flags=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXISTIf GetOpenFileName(ofn)=0 Then Exit Function'OpenDim hF As HANDLEDim r As DwordDim x As *BytehF = CreateFile( buffer, GENERIC_READ, 0, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)SetDWord(sss, GetFileSize(hF, 0))x = calloc(GetDword(sss)+1)ReadFile(hF, x, GetDword(sss), sss, ByVal 0)CloseHandle(hF)LoadFile = xEnd Function'oooの内容を保存Function SaveFile(ooo As *Byte, sss As Long) As LongDim ofn As OPENFILENAMEDim buffer[333] As Byteofn.lStructSize=SizeOf(OPENFILENAME)ofn.hwndOwner=GetActiveWindow()ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0"ofn.nFilterIndex=1ofn.lpstrFile=bufferofn.nMaxFile=333ofn.lpstrTitle="ファイルを保存"ofn.Flags=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXISTIf GetSaveFileName(ofn)=0 Then Exit Function'OpenDim hF As HANDLEDim w As DwordhF = CreateFile(buffer, GENERIC_WRITE, 0, ByVal 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0)WriteFile(hF, ooo, sss, VarPtr(w), ByVal 0)CloseHandle(hF)SaveFile = 44End Function
https://w.atwiki.jp/sampleisbest/pages/80.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 utf16 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode utf16.c #include tchar.h #include Windows.h #include "resource.h" // 関数プロトタイプ宣言 ATOMMyRegisterClass(HINSTANCE hInstance); BOOLInitInstance(HINSTANCE hInstance, int nCmdShow); LRESULT CALLBACKWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); intOnCommand(HWND hWnd, WPARAM wParam); voidOnFormFont(HWND hWnd); voidOnCreate(HWND hWnd); voidOnXScroll(HWND hWnd, WPARAM wParam, int nBar, LPSCROLLINFO lpsi); voidOnPaint(HWND hWnd); // グローバル変数 TCHARg_atcClassName[] = _T("utf16"); TCHARg_atcWindowName[] = _T("UTF-16"); HINSTANCEg_hInstance; SCROLLINFOg_siHorz; SCROLLINFOg_siVert; LOGFONTg_lf; intg_iUnitSize = 32; //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { MSGmsg; HACCELhAccelTable; MyRegisterClass(hInstance); if (InitInstance(hInstance, nCmdShow) == FALSE) { return 0; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDR_MAINFRAME); while (GetMessage( msg, NULL, 0, 0)) { if (TranslateAccelerator(msg.hwnd, hAccelTable, msg) == 0) { TranslateMessage( msg); DispatchMessage( msg); } } return msg.wParam; } //------------------------------------------------------------------------------ ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXwcex; wcex.cbSize= sizeof (WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= WndProc; wcex.cbClsExtra= 0; wcex.cbWndExtra= 0; wcex.hInstance= hInstance; wcex.hIcon= LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor= LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName= (LPCTSTR)IDR_MAINFRAME; wcex.lpszClassName= g_atcClassName; wcex.hIconSm= LoadIcon(NULL, IDI_APPLICATION); return RegisterClassEx( wcex); } //------------------------------------------------------------------------------ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWNDhWnd; g_hInstance = hInstance; hWnd = CreateWindowEx( WS_EX_ACCEPTFILES, g_atcClassName, g_atcWindowName, WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, CW_USEDEFAULT, 0, 720, 720, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT OnPaint(hWnd); break; case WM_COMMAND if (OnCommand(hWnd, wParam)) { return DefWindowProc(hWnd, uMsg, wParam, lParam); } break; case WM_HSCROLL OnXScroll(hWnd, wParam, SB_HORZ, g_siHorz); break; case WM_VSCROLL OnXScroll(hWnd, wParam, SB_VERT, g_siVert); break; case WM_CREATE OnCreate(hWnd); break; case WM_DESTROY PostQuitMessage(0); break; default return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } //------------------------------------------------------------------------------ int OnCommand(HWND hWnd, WPARAM wParam) { static struct { UINTuiMsg; intnScrollCode; } a[] = { {WM_HSCROLL, SB_LINEUP},// ID_LEFT {WM_VSCROLL, SB_LINEUP},// ID_UP {WM_HSCROLL, SB_LINEDOWN},// ID_RIGHT {WM_VSCROLL, SB_LINEDOWN},// ID_DOWN {WM_HSCROLL, SB_TOP},// ID_HTOP {WM_VSCROLL, SB_TOP},// ID_VTOP {WM_HSCROLL, SB_BOTTOM},// ID_HBOTTOM {WM_VSCROLL, SB_BOTTOM},// ID_VBOTTOM }; WORDwID; WORDw; wID = LOWORD(wParam); w = wID - ID_LEFT; if (w _countof(a)) { SendMessage(hWnd, a[w].uiMsg, a[w].nScrollCode, (LPARAM)NULL); return 0; } switch (wID) { case ID_APP_EXIT DestroyWindow(hWnd); break; case ID_FORM_FONT OnFormFont(hWnd); break; default return 1; } return 0; } //------------------------------------------------------------------------------ void OnFormFont(HWND hWnd) { CHOOSEFONTcf; ZeroMemory( cf, sizeof cf); cf.lStructSize= sizeof cf; cf.hwndOwner= hWnd; cf.lpLogFont= g_lf; cf.Flags= CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT; cf.nFontType= SCREEN_FONTTYPE; if (ChooseFont( cf) == FALSE) { return; } InvalidateRect(hWnd, NULL, TRUE); } //------------------------------------------------------------------------------ void OnCreate(HWND hWnd) { g_siHorz.cbSize= sizeof (SCROLLINFO); g_siHorz.fMask= SIF_RANGE | SIF_PAGE | SIF_POS; g_siHorz.nMin= 0; g_siHorz.nMax= 15; g_siHorz.nPage= 1; g_siHorz.nPos= 0; g_siVert = g_siHorz; SetScrollInfo(hWnd, SB_HORZ, g_siHorz, FALSE); SetScrollInfo(hWnd, SB_VERT, g_siVert, FALSE); ZeroMemory( g_lf, sizeof g_lf); g_lf.lfHeight = g_iUnitSize; _tcscpy_s(g_lf.lfFaceName, _countof(g_lf.lfFaceName), _T("メイリオ")); } //------------------------------------------------------------------------------ void OnXScroll(HWND hWnd, WPARAM wParam, int nBar, LPSCROLLINFO lpsi) { intiPos; iPos = lpsi- nPos; switch (LOWORD(wParam)) { case SB_LINEUP // 0 case SB_PAGEUP // 2 iPos--; break; case SB_LINEDOWN // 1 case SB_PAGEDOWN // 3 iPos++; break; case SB_THUMBTRACK // 5 iPos = HIWORD(wParam); break; case SB_TOP // 6 iPos = 0; break; case SB_BOTTOM // 7 iPos = 15; break; } iPos = min(iPos, 15); iPos = max(iPos, 0); if (iPos == lpsi- nPos) { return; } lpsi- nPos = iPos; SetScrollInfo(hWnd, nBar, lpsi, TRUE); InvalidateRect(hWnd, NULL, TRUE); } //------------------------------------------------------------------------------ void OnPaint(HWND hWnd) { PAINTSTRUCTps; HDChdc; HFONThFont; HGDIOBJhFontOld; RECTrc; TCHARatcStr[16]; intiPage; intiHigh; intiLow; hdc = BeginPaint(hWnd, ps); // フォント //g_lf.lfHeight = g_iUnitSize; hFont = CreateFontIndirect( g_lf); hFontOld = SelectObject(hdc, hFont); // 見出し iPage = (g_siVert.nPos 4) + g_siHorz.nPos; SetRect( rc, g_iUnitSize, 0, 200, g_iUnitSize); _stprintf_s(atcStr, _countof(atcStr), _T("%02X区"), iPage); DrawText(hdc, atcStr, -1, rc, DT_LEFT); // 下位ヘッダ rc.left= g_iUnitSize * 2; rc.top= g_iUnitSize; rc.bottom= rc.top + g_iUnitSize; for (iLow = 0; iLow 16; iLow++) { rc.right = rc.left + g_iUnitSize; _stprintf_s(atcStr, _countof(atcStr), _T("%02X"), iLow); DrawText(hdc, atcStr, -1, rc, DT_CENTER); rc.left = rc.right; } // 上位ヘッダ rc.left= g_iUnitSize; rc.top= g_iUnitSize * 2; rc.right= rc.left + g_iUnitSize; for (iHigh = 0; iHigh 16; iHigh++) { rc.bottom = rc.top + g_iUnitSize; _stprintf_s(atcStr, _countof(atcStr), _T("%02X"), iHigh 4); DrawText(hdc, atcStr, -1, rc, DT_CENTER); rc.top = rc.bottom; } atcStr[0] = iPage 8; for (iHigh = 0; iHigh 16; iHigh++) { rc.left= g_iUnitSize * 2; rc.top= g_iUnitSize * (2 + iHigh); rc.bottom= rc.top + g_iUnitSize; for (iLow = 0; iLow 16; iLow++) { rc.right = rc.left + g_iUnitSize; DrawText(hdc, atcStr, 1, rc, DT_CENTER); atcStr[0]++; rc.left = rc.right; } } SelectObject(hdc, hFontOld); DeleteObject(hFont); EndPaint(hWnd, ps); } resource.h #define ID_APP_EXIT100 #define ID_FORM_FONT101 #define IDR_MAINFRAME128 #define ID_LEFT129 #define ID_UP130 #define ID_RIGHT131 #define ID_DOWN132 #define ID_HTOP133 #define ID_VTOP134 #define ID_HBOTTOM135 #define ID_VBOTTOM136 utf16.rc // リソーススクリプト #include windows.h #include "resource.h" //------------------------------------------------------------------------------ // メニュー IDR_MAINFRAME MENU BEGIN POPUP "ファイル( F)" BEGIN MENUITEM "アプリケーションの終了( X)", ID_APP_EXIT END POPUP "書式( O)" BEGIN MENUITEM "フォント( F)...\tCtrl+F", ID_FORM_FONT END END //------------------------------------------------------------------------------ // アクセラレータ IDR_MAINFRAME ACCELERATORS BEGIN VK_LEFT,ID_LEFT,VIRTKEY// 0x25 VK_UP,ID_UP,VIRTKEY// 0x26 VK_RIGHT,ID_RIGHT,VIRTKEY// 0x27 VK_DOWN,ID_DOWN,VIRTKEY// 0x28 VK_LEFT,ID_HTOP,VIRTKEY, CONTROL VK_UP,ID_VTOP,VIRTKEY, CONTROL VK_RIGHT,ID_HBOTTOM,VIRTKEY, CONTROL VK_DOWN,ID_VBOTTOM,VIRTKEY, CONTROL "F",ID_FORM_FONT,VIRTKEY, CONTROL END
https://w.atwiki.jp/selflearn/pages/55.html
( - ) MacでのUTF-8-MAC問題を解決する方法 このページでは、MacでSubversionを使用するときにぶち当たる問題「UTF-8-MAC問題」を解決する方法について記します。 NEWS!! 2009/04/27 hayatoさんのコメントによると、この問題に対処するパッチが、ついにMacPortsでのvariantとして取り込まれたとのことです!『$ sudo port -v install subversion +unicode_path』と、“+unicode_path”を追加指定すればOKです。そうすれば、このページで紹介している方法をわざわざ実施するまでもありません。苦節ウン年、ついに報われました・・・。 最終更新日:2009年06月05日 (金) 10時58分51秒; どんな問題を解決しようとしているの? Subversionは内部の処理をUTF-8で行い、クライアント環境での文字コードに合わせて適切なコードに変換してから処理を行っています。 けれどもOS Xのファイルシステムでは、実際には「UTF-8-mac」というUTF-8そのものとは少し異なるコードを用いているにも関わらず、Subversionでは「UTF-8」と判断してしまう有名な問題があります。「UTF-8-MAC問題」、と言われている問題です。 本問題により、日本語のファイル名、とくに濁点「゛」や半濁点「゜」を用いたファイルのステータスを見ようとすると、 % svn st ? パッチファイル.txt ! パッチファイル.txt % というように、ファイルの存在を正しく取り扱えません。ソースコードの管理に使用するだけならアルファベットのファイルしか多分扱わないので問題はないでしょうが、 プログラマ以外の人とSubversionを使用する 設計書などのドキュメントをバージョン管理する 他のOS(Windowsなど)を使うユーザとSubversionを共用する などという場合に非常に厄介な問題になるわけで。 この問題を解決しよう、というのが以下に記述する方法です。 本問題を解決するに当たって、多くのサイトの情報を参考にさせてもらいました。それらはできる限り参考サイトに載せておきましたが、載せられなかった方については、この場を借りてお詫び&お礼を申し上げておきます。 想定環境 ソースコードに直接手を入れているので、ページ初回作成時の環境を明示しておきます。 プログラム バージョン OS Mac OS X 10.5 Leopard(10.5.4/10.5.5) IntelMac上で使用 MacPorts 1.600 Subversion 1.5.1 (r32289) 同じ方針で修正できるバージョン(確認済み) バージョン 補足 1.5.1 このページで記載している情報です 1.5.2 1.5.4 1.5.5 hayatoさん、ありがとうございます 1.5.6 DEXさん、ありがとうございます 1.6.0 path.cに手が入ったようで、関数svn_path_cstring_to_utf8()が1070行に移動しています。それ以外は同じです 1.6.1 同上。 Subversionのソースコードで手を入れるところは少なく、関数名も変わったりしないような部分なので旧バージョンや今後のバージョンでも問題は出にくいでしょうが、ターゲットが異なる方は行番号や関数名などには気を付けてください。 手順 まず、大まかな手順を伝えておきます。 MacPortsでSubversionのソースコードを入手(まだインストールはしない) ソースコードの変更 MacPortsでインストールの続行 1.MacPortsでSubversionのソースコードを入手 MacPortsのサイトから、MacPortsをインストールしたら、Subversionのソースコードを入手します。そして、 % sudo port patch subversion --- Fetching subversion --- Verifying checksum(s) for subversion --- Extracting subversion --- Applying patches to subversion % と入力します。これによってSubversionで./configureが行われる前の状態まで処理が進み、以下の場所にソースコード一式が保存されます。 /opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/subversion/work/subversion-1.5.1/subversion この中のファイルを修正します。 2.ソースコードの変更 上に記した場所に移動して、libsvn_subr/path.cをエディタで開きます(*1)。 そして、以下のdiff結果に示すような変更を施します。 % diff -u path.c{_orig,} --- path.c_orig2008-09-12 15 30 18.000000000 +0900 +++ path.c2008-09-12 15 30 13.000000000 +0900 @@ -31,6 +31,9 @@ #include "svn_io.h" /* for svn_io_stat() */ #include "svn_ctype.h" +#if defined(DARWIN) +#include CoreFoundation/CoreFoundation.h +#endif /* DARWIN */ /* The canonical empty path. Can this be changed? Well, change the empty test below and the path library will work, not so sure about the fs/wc @@ -1349,6 +1352,36 @@ apr_pool_t *pool) { svn_boolean_t path_is_utf8; +#if defined(DARWIN) + svn_error_t *err; + /* + Compose any decomposed unicode characters precomposed one. + This will solve the problem that the svn status command sometime + cannot recognize as same file when files suppose to be comtain + comopsed characters, like umlaut in some European language or + Daku-ten in Japanese, and the files are added on windows machines + then you use svn on Mac OS X checking out the files. + */ + CFMutableStringRef cfmsr = CFStringCreateMutable(NULL, 0); + CFStringAppendCString(cfmsr, path_apr, kCFStringEncodingUTF8); + CFStringNormalize(cfmsr, kCFStringNormalizationFormC); + CFIndex path_buff_size = 1 + CFStringGetMaximumSizeForEncoding( + CFStringGetLength(cfmsr), kCFStringEncodingUTF8); + char *path = apr_palloc(pool, path_buff_size); + CFStringGetCString(cfmsr, path, path_buff_size, kCFStringEncodingUTF8); + + SVN_ERR(get_path_encoding( path_is_utf8, pool)); + + if (path_is_utf8) + { + *path_utf8 = apr_pstrdup(pool, path); + err = SVN_NO_ERROR; + } + else + err = svn_utf_cstring_to_utf8(path_utf8, path, pool); + CFRelease(cfmsr); + return err; +#else /* DARWIN */ SVN_ERR(get_path_encoding( path_is_utf8, pool)); if (path_is_utf8) { @@ -1357,6 +1390,7 @@ } else return svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); +#endif /* DARWIN */ } このときの注意点として、関数svn_path_cstring_to_utf8()に手を入れるようにしてください。 最初ボクは間違えてすぐ近くのsvn_path_cstring_from_utf8()に手を入れてしまい、コンパイルできたもののsvnが起動すら出来なくなってしまいました(*2)。注意!! なお他の依存関係のあるportは先にインストールしてしまっても構わないので、次のようにしておいた方が楽かもしれません。 % sudo port install subversion % sudo port uninstall subversion % sudo port patch subversion % 3.MacPortsでインストールの続行 修正したファイルによってSubversionをビルドします。 % sudo port install subversion --- Building subversion with target all --- Staging subversion into destroot --- Installing subversion 1.5.1_0 --- Activating subversion 1.5.1_0 --- Cleaning subversion % 最後に「which svn」として、/opt/local/binの下にパスが通っていればOK。作業完了です。 補足 port installした後、修正したソースコード一式はportによって削除されてしまいます。とっておきたい場合はSubversionのフォルダごと別の場所にコピーしておいてください。 SubversionのBTSでは「この問題はけっこう複雑なので、(今回紹介した)パッチをコミットすることはできない」と書いてあります。今のところ問題は出ていませんが、念のためご注意ください(ご利用は自己責任で、ということですスミマセン)。 参考サイト 調べたサイト Subversionでの該当課題(#2464)。本記事ではここに投稿されていたパッチファイルを使用しています。パッチを投稿してくれたHiroshi Saito氏に多謝! Subversion Precomposed UTF-8 patch。上のパッチを投稿した人のサイト。ただ、このブログで紹介されているパッチのリンク先が2008/9/12時点では「Service Temporarily Unavailable」でした。 2007-12-30 OS Xで日本語が通るSubversion環境の作り方。UTF-8-MAC問題の原因が分かったサイト。ただしここで紹介されていたget_ntou_xlate_handle_node()とget_uton_xlate_handle_node()を変更する方法では問題は解決しませんでした。 その他、MacでSubversionを使用するときの有益なサイト MacPortsのサイト MacPorts勉強会の資料。けっこう詳しく載っているので、一度見ておくと良いです。 SCPlugin。Mac上でTortoiseSVNと同様のUIを提供するソフト(ボクは未使用)。インストールする方法はココが詳しいです。 コメント お気軽にコメントくださいな。 2008/9/25時点の1.5.2でも同様の方法でパッチが当てられることを確認しました。 -- katokichi (2008-09-25 16 11 58) 2008/11/05時点の1.5.4でも大丈夫でした。 -- katokichi (2008-11-05 15 13 23) 2008-12-25時点の1.5.5も全く同じでした。参考にさせていただきました。ありがとうございました。 -- hayato (2008-12-25 19 46 08) hayatoさん、ご連絡ありがとうございます。このパッチ,trunkに取り込まれると良いんですけどね。日本語だけでなく,その他のマルチバイト文字でも影響がある問題なので。 -- katokichi (2008-12-26 11 42 26) portでインストールした 1.5.6でも同じでした。ありがとうございました。 -- DEX (2009-03-17 13 09 40) ご確認ありがとうございます。この辺はもう手が入ることは無いんですかね。毎回の修正は面倒なのに、こまったものです。 -- katokichi (2009-03-17 16 05 49) 1.6でも同じ方法で動かせることを確認。ただしpath.cに手が入ったようで、目的の関数の行が変化していることに注意。 -- katokichi (2009-04-02 10 03 19) 1.6.1でも確認しました。注意点は1.6(.0)のときと同じです -- katokichi (2009-04-13 16 49 48) この問題に対応するvariantの+unicode_pathが用意されていたみたいです。http //d.hatena.ne.jp/fujisan3776/20081231/1230700127 $ sudo port -v install subversion +unicode_path -- hayato (2009-04-26 23 57 58) おお!ありがとうございます!ついに、ついに報われる日が来たという感じですね。このページもとうとう必要のないものになりました。うれしいです・・・。コメントありがとうございました! -- katokichi (2009-04-27 08 56 30)
https://w.atwiki.jp/sevenlives/pages/617.html
RFC 2279? UTF-8N?
https://w.atwiki.jp/newweb/pages/5.html
!DOCTYPE html html lang= ja head meta http-equiv= Content-Type content= text/html; charset=utf-8 title 題名 /title /head body 本文 /body /html
https://w.atwiki.jp/parepan/pages/160.html
PostgreSQLの文字コードをUTF8で利用する場合は「CSE」のODBC接続では文字化け が発生します。 この場合は、「CSE」よりPosgreSQLにネイティブ接続する事により文字化けを解決 可能です。 添付している「libpg.dll」を「CSE」のフォルダに設置し、以下のCSE接続にてDBに接続してください。 ※添付ファイルは画面一番下にあります。 DBMS PostgreSQL ユーザ名 Postgres定義で設定しているユーザ名 パスワード Postgres定義で設定しているパスワード サーバ名 サーバのIP-Address DB名 データベース名 ポート番号 標準では5432 オプション 設定なし(空白) 標準出力先 設定なし(空白) libsq.dllについての動作保証はありませんので自己責任にて利用の事
https://w.atwiki.jp/unity2ch/pages/21.html
アセット3DモデルLightwave3DからFBXファイルでボーンアニメーションを付けたオブジェクトをエクスポートする際の制限事項。 Blenderからのインポート方法 SketchUp(フリー版)からのインポート方法 ゲームオブジェクト GUI画面全面に画像表示 日本語表示 スクリプト その他 アセット インポート可能なファイル形式は→Asset Importing参考のこと。 3Dモデル Lightwave3DからFBXファイルでボーンアニメーションを付けたオブジェクトをエクスポートする際の制限事項。 Blenderからのインポート方法 Blender2.49bを利用し、FBXエクスポータで出力したものをインポートする方法をお勧めします。 Blender2.5の.blendやFBXエクスポータで出力したものはインポートできません(2010/4/7現在) インポートされるデータは以下になります(2010/4/7現在)All nodes with position, rotation and scale. Pivot points and Names are also imported. Meshes with vertices, polygons, triangles, UVs, and normals. Bones Skinned Meshes Animations ※.blendを直接インポートできますが、内部的にBlenderのFBX変換を利用してインポートが行われます。 ※この方法ではIPO周りが読み込まれませんので、FBXエクスポータで出力してインポートするのが良いようです。(→参考) SketchUp(フリー版)からのインポート方法 SketchUpの.kmz形式の実体はzipファイルであり、COLLADA形式(.dae)のモデルを含んでいます。拡張子を.zipにリネームしてモデルを抽出すればUnityにインポート可能です。 ゲームオブジェクト GUI 画面全面に画像表示 GUI.DrawTexture()を使い、GUIレイヤにテクスチャを表示する方法で実現します。 やり方としては下記のスクリプトをカメラに割り当て、プロパティbgに画像を設定します。 public class NewBehaviourScript MonoBehaviour { public Texture2D bg; void OnGUI () { GUI.DrawTexture(new Rect(0,0, Screen.width, Screen.height), bg); } } なお、ゲームオブジェクトの背面に表示するにはPro版でないとできないようです(→参考) 日本語表示 16 名前:名前は開発中のものです。[sage] 投稿日:2009/11/19(木) 15 05 58 ID xSzD3fum 日本語をラベルにしたボタンを表示できたので記念パピコ 日本語のTTFファイルをアセットに追加した後、 スクリプトでpublicなGUISkinを定義したらそれがアセットに自動追加されるから、 インスペクタで各フォームアイテムのデフォルトフォントとしてさっきのTTFを指定したら行けた ちなみに公式ドキュメントはここ ttp //unity3d.com/support/documentation/Components/class-Font.html 追加情報: Unity3.0ではttfをアセットに含めたり、独自のGUISkinを定義したりすることなく日本語表示できる。(上の情報はバージョンが古いか、iPhone版とかの情報なのかも) ただし、文字コードに気をつける必要あり。セットで付いてくるテキストエディタ(UniSciTE(Windows版)/Unitron(Mac版))はいずれもデフォルトのエンコードがUTF8だと思うので、そのままだとでない。 Windows版だと SJIS ○ (ただし、Inspector上だと文字化け。ゲーム画面では正しく表示される。UniSciTEでは書けない) UTF8 × (Inspector上では正しく表示されるが、Monoが文字列リテラルの終了を正しく認識できず、スクリプトがコンパイルできない) UTF8 BOM ○ UCS2 LE ○ UCS2 BE ○ MacOSX版だと SJIS × UTF8 × (Inspector上では正しく表示され、コンパイルも通るが、UnityGUIでは?に置換されて表示されてしまう) UTF8 BOM 不明 (手元にMacでUTF8 BOMを書けるエディタがなかった) UTF16 ○ UCS2 LE 未検証 UCS2 BE 未検証 UCS2 BEはUTF16互換なはずなので、Macとクロスプラットフォーム開発したい人はスクリプトをUTF16(UCS2 BE)で現状統一する必要がある。 スクリプト スクリーンショット保存 →Application.CaptureScreenshot() 画面上のクリックした場所にあるオブジェクト名を取得 //C# void Update () { if (Input.GetMouseButtonUp(0)) { Ray clkRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit rh; if (Physics.Raycast(clkRay, out rh)) { Debug.Log("hit object name " + rh.transform.root.name); } } } その他 ショートカット一覧